代码完全相同——我将其从一台计算机复制到另一台计算机。代码在两台计算机上均使用从 fink on OSX 获得的 g++-4 (4.9.1) 进行编译,并且未并行运行。
编译器选项为“-O2”,计算机基本不做其他事情(CPU 和内存使用率低)。代码是 2400 行的研究代码关联。
机器 1:
- 2013 年末 MacBook Pro Retina,
- 2.8 GHz i7-4558U,
- 16GB 1600MHz DDR3,
- 500GB 闪存
机器2:
- 2013 年末 MacPro 工作站,
- 3.5GHz 6 核 Intel Xeon E5-1650,
- 32GB 1867MHz DDR3
- 251GB 闪存,
- 3TB 外置 SATA 硬盘
运行时间:
机器 1:输出 200 秒,不含 18 秒。
机器 2:(/ 目录 - 应为闪存驱动器):输出 2230 秒,不含 2075 秒。
机器 2:(~ 目录 - 应为外部驱动器):输出 2262 秒,不含 2080 秒。
关于如何改善 MacPro 的运行时间,有什么想法吗?
答案1
解决“为什么这段代码运行时间这么长”这个问题的正确方法是使用一个叫做分析器。
基本上,你通过分析器或附加分析器来运行程序,分析器会记录程序在各个函数上花费的时间。然后以某种形式将这些信息呈现给你,让你可以精确定位程序在执行过程中运行时间最长的部分。通常还可以从该报告中获得其他信息,例如程序的哪些部分被调用的次数最多,诸如此类的信息,这些信息也可以指出需要仔细审查的领域。
根据这些数据,通常很容易判断哪些部分需要优化,以使程序运行得更快,而无需使用被称为“过早优化”的猜谜游戏或依赖某些特定硬件的细节。