相同的代码,不同的计算机——违反直觉且性能差异巨大

相同的代码,不同的计算机——违反直觉且性能差异巨大

TL;DR:我正在做一些性能计算,我发现表面上“较弱”的机器比“较强”的机器性能高出几个数量级。为什么?

我为一个项目写了一些 C 代码。它涉及一个冗长过程的 10,000 次迭代,该过程生成伪随机数据,并在每次迭代后将数据写入文件。我曾经使用#pragma omp parallel for多线程执行该任务。

我可以在两台机器上运行我的程序:我们称它们为sd。以下是相关规格(请询问任何其他可能重要的规格):

  • s:Linux Mint 15、三星 840 EVO SSD、8GB RAM、四核英特尔 i3 CPU @ 2.40 gHZ
  • d:Linux Mint 16、英特尔 SSD、8GB RAM、八核 AMD FX-8320 CPU @ 3.5 gHZ

以下是一个大惊喜:s完成任务的速度比d。我在两台机器上运行了几次这个程序,s大约 3-4 分钟即可完成任务,而d需要 12 到 30 分钟(我忘记时间了)。它们在计算时都完全耗尽了核心(即所有核心都达到 100%)。即使在打开辅助程序(Firefox 等)的情况下,这种现象仍然会出现s,并且没有其他任何运行d

但代码是一样的。编译器标志是一样的。甚至输出也是一样的。我甚至从两者中移除了驱动器sd,然后交换它们,然后再次运行该程序,只是为了测试它与操作系统无关。结果是这种现象仍然存在:四核 2.4 gHZ CPU 的性能远远优于八核 3.5 gHZ CPU。

这当然非常令人困惑,而且完全违反直觉。有人能告诉我发生了什么吗?

答案1

您所谈论的是兆赫神话,数字越大并不总是意味着越好,因为实际计算速度取决于架构和设计因素。这里有一个关于该问题的很好的网页。

相关内容