我正在对科学应用程序进行一些性能测试,并尝试考虑所有可能影响应用程序性能的元素(如缓存大小层次结构cpu速度...缓存行以及可能涉及的性能)。这个问题在我脑海中浮现,虽然它可能是愚蠢的,但我想让它显而易见。
*的 问题: *
如果我不正确,请处理int.cost处理int和float或double值在处理器上是不同的,这是因为使用CPU浮点单位(计算浮点值)。现在我想知道用相同的float或double值填充两个2d矩阵之间是否存在差异,然后将它们相乘或用随机浮点数或double值填充它们然后相乘它们。剂量编译器使用缓存来表示所有元素具有相同值的矩阵?
如果A和B的大小对处理时间有任何影响(例如乘法),或者像 AB 一样处理浮动值,其中A和B可以是数字大小不同的数字不?如果存在差异,那么考虑与否是很重要的吗? 。 我能够使用性能计数器库来测量我的应用程序的性能,但由于使用过的库的开销,你无法确定指令/触发器变化是用于随机值还是其他参数,如I / Dcache未命中,缓存大小,问题大小或其他参数。
二手机器intel E4500。 编译器g ++ 4.7。
由于
答案 0 :(得分:2)
你是对的,整数和浮点运算成本是不同的,但没有人们假设的那么多。它在很大程度上取决于使用哪个处理器单元进行计算。特别是对于英特尔处理器,您可以在http://www.intel.com/products/processor/manuals/的“优化参考手册”中找到有用的信息。附录C列出了所有指令的指令延迟。
对于您的具体问题,如果矩阵乘法的计算时间取决于两个矩阵的条目是否包含相同或随机值,则答案为“否”。如果你在计算运行时查看指令的数量和顺序以及内存访问模式,两种情况都是一样的。编译器通常也不能利用矩阵全部由相同条目组成的事实,因为矩阵乘法需要涵盖所有可能的情况。 (好吧,除非你打包所有内容 - 填充矩阵条目和乘法本身 - 在一个函数中排除所有副作用,如别名,然后一个非常非常聪明的编译器可能会从中产生一些东西,但我们不是在谈论那个,对吧?)
此外,数字大小(我假设您指的是十进制数字)并不重要。在单精度浮点数(或双精度情况下为64位)的情况下,每个矩阵条目由其32位的全部表示。