1

我正在对科学应用程序进行一些性能测试,并尝试考虑所有可能影响应用程序性能的元素(如缓存大小层次结构 cpu 速度......缓存线以及任何可能与性能相关的因素)。这个问题出现在我的脑海中,虽然它可能很愚蠢,但我想让它对我很明显。

*问题: *

如果我不对,请纠正我。处理 int 和 float 或 double 值的成本在处理器上是不同的,这是因为使用 CPU 浮点单元(计算浮点值)。现在我想知道用相同的浮点数或双精度值填充两个二维矩阵并将它们相乘或用随机浮点数或双精度值填充它们然后相乘之间是否有区别。剂量编译器对所有元素都具有相同值的矩阵使用缓存?

总共处理处理浮点值,例如(AB),如果 A 和 B 的大小对处理时间(例如乘法)有影响,则 A 和 B 可以是数字大小不同的数字?如果有不同的剂量,重要的是要考虑还是不考虑?. 我可以使用性能计数器库来测量我的应用程序的性能,但是由于使用库的开销,您不能确定指令/触发器变化是针对随机值或其他参数,如 I/Dcache 未命中、缓存大小、问题大小或其他参数。

二手机器intel E4500。编译器 g++ 4.7。

谢谢

4

1 回答 1

2

你是对的,整数和浮点算术成本是不同的,但并不像人们想象的那么大。这在很大程度上取决于用于计算的处理器单元。特别是对于 Intel 处理器,您可以在http://www.intel.com/products/processor/manuals/上的“优化参考手册”中找到有用的信息。附录 C 列出了所有指令的指令延迟。

对于您的具体问题,如果矩阵乘法的计算时间取决于两个矩阵的条目是否包含相同或随机值,则答案为“否”。如果您在计算运行时查看指令的数量和顺序以及内存访问模式,在这两种情况下都是一样的。编译器通常也不能利用矩阵都由相同条目组成的事实,因为矩阵乘法需要涵盖所有可能的情况。(好吧,除非你把所有东西都打包——填充矩阵条目和乘法本身——在一个函数中并排除所有副作用,比如别名,那么一个非常非常聪明的编译器可能会从中做出一些事情,但我们不是在谈论那个, 对?)

此外,数字大小(我假设您指的是十进制数字)并不重要。在单精度浮点数的情况下(或在双精度情况下的 64 位),每个矩阵条目都由其所有32 位表示。

于 2013-01-03T16:06:39.043 回答