我正在对科学应用进行一些性能测试,并试图考虑所有可能影响应用程序性能的元素(如缓存大小层次结构CPU速度...缓存行以及以往可能与性能有关)。这个问题出现在我的脑海里,虽然它可能是愚蠢的,但我想让它变得很明显。性能乘以2相同/不相同的矩阵
* 问: *
,如果我不对指正please.cost处理整型和浮点或双精度数在处理器不同,这是因为使用CPU浮点单元(以计算浮点值)。现在我想知道在用相同的float或double值填充两个2d矩阵之间是否存在差异,然后将它们相乘或填充它们的随机float或double值,然后将它们相乘。剂量编译器使用缓存矩阵的所有元素具有相同的值?
如果A和B的大小对处理时间(例如乘法)有任何影响或没有影响,那么A和B可以是数字中不同大小的数字,如(A.B)的总处理处理浮点值?如果有差异剂量,重要的是要考虑与否? 。 我能够使用性能计数器库来测量我的应用程序的性能,但是由于使用过的库的开销,您无法确定指令/触发器变化是针对随机值还是其他参数,如I/Dcache未命中,缓存大小,问题大小或其他参数。
二手机器英特尔E4500。 编译器g ++ 4.7。
感谢
我非常怀疑编译器会缓存这些值。另一方面,一些数学API可能会。处理器甚至可能有(可能很小)的机会。要进行基准测试,请运行足够多的时间或足够长的矩阵,以便实际使用至少几秒钟,然后在性能检查之外填充矩阵。 – Dukeling
这就是为什么高层优化比低层优化更重要的原因。如果你知道所有的值都是相同的,你可以将问题从O(n^3)减少到O(n^2),而无论处理器有多聪明,它总是O(n^3)如果你执行完整的乘法。 –
你的问题真的很一般。你能更具体地了解情况吗?在这种一般情况下,在整个堆栈中提及所有可能的优化几乎是不可能的。 –