矩阵乘法的实际运行时间计算

时间:2016-11-14 12:10:00

标签: performance

我想计算一下矩阵乘法问题的运行时间。以下是我的假设:

  • 无并行编程
  • 2 Ghz CPU
  • 大小为n
  • 的方阵
  • 一个O(n ^ 3)算法

例如假设n = 1000.那么,我应该花多少时间(大约)取这个矩阵的平方将采用上述假设。 感谢。

1 个答案:

答案 0 :(得分:1)

这非常依赖于算法和CPU。即使没有并行化,在CPU上表示相同步骤的方式也有很大的自由度,以及同一系列的不同CPU之间的差异(各种操作所需的时钟周期)也是如此。也不要忘记现代CPU自己添加一些指令的并行化。编译器完成的优化将重新排序内存顺序和分支,并且可能会将指令转换为矢量化指令,即使您没有指定。根据其他因素,它可能会产生影响,无论您的矩阵是在内存中的固定位置,还是通过指针访问它们,以及它们是动态分配固定大小还是每行/列。不要忘记内存缓存,页面失效和操作系统调度,就像我之前的答案中所做的那样。

如果这是针对您自己的粗略估算或针对"典型的"例如,你只是编写程序,在特定条件下运行 (如上所述),在n = 1000的多次重复中计算平均值,你不会做错。

如果你想为更糟糕的结果付出很多努力,你实际上可以在你原来的问题中做你可能想做的事情:

  1. 查看特定编译器在特定条件下以及特定优化下为特定算法生成的指示设置(如here
  2. 选择您的特定处理器并找到其latency table for every instruction that's there
  3. 每次迭代添加它们并乘以1000 ^ 3,
  4. 除以时钟频率。
  5. 说真的,它不值得付出努力,无论如何,基准测试更快,更清晰,更精确(因为这不考虑分支预测器和超线程和内存缓存以及其他架构细节中发生的事情)。如果你想要练习,我会留给你。