我正在对科学的应用程序进行一些性能测试,并试图考虑到影响应用程序性能的所有因素(如缓存大小、层次结构、cpu速度等)。缓存行和任何可能与性能相关的内容)。这个问题出现在我的脑海中,虽然它可能是愚蠢的,但我想让我明白这一点。
*Question:*
如果我不正确,纠正我的please.cost处理int和浮点数或双值在处理器上是不同的,这是因为使用CPU浮点单元(计算浮点值)。现在我想知道,用相同的浮点或双值填充两个2d矩阵,然后乘以它们,或者用随机浮点数或双值填充它们,然后再将它们相乘。the编译器对所有元素都具有相同值的矩阵使用缓存。
如果A和B的大小对处理时间有任何影响(例如乘法),则A和B可以是不同大小的数字(如A和B的大小)。如果有不同的情况,那么考虑一下是否重要?我可以使用性能计数器库来度量我的应用程序的性能,但是由于使用过的库的开销,您不能肯定指令/触发器的变化是针对随机值或其他参数,如I/Dcache遗漏、缓存大小、问题大小或其他参数。
二手机器英特尔E4500。编译器g++ 4.7.
谢谢
发布于 2013-01-03 16:06:39
你是对的,整数和浮点数的算术代价是不同的,但没有人们所能想象的那么多。这在很大程度上取决于计算所用的处理器单元。特别是对于英特尔处理器,您可以在http://www.intel.com/products/processor/manuals/提供的“优化参考手册”中找到有用的信息。附录C列出了所有指令的指令延迟。
对于您的具体问题,如果矩阵乘法的计算时间取决于两个矩阵的条目是否包含相同的或随机的值,则答案是“否”。如果在计算运行时查看指令的数量和顺序以及内存访问模式,那么在这两种情况下都是一样的。编译器通常也不能利用矩阵都由相同的条目组成这一事实,因为矩阵乘法需要涵盖所有可能的情况。(好吧,除非你把所有东西--填充矩阵条目和乘法本身--放在一个函数中,并排除所有像混叠这样的副作用,那么一个非常聪明的编译器可能会从中得到一些东西,但我们不是在讨论这个问题,对吗?)
此外,以数字为单位的大小(我假设您指的是十进制数字)并不重要。在单精度浮点数情况下,每个矩阵条目都用表示,32位的所有(或双精度的64位)表示。
https://stackoverflow.com/questions/14110545
复制相似问题