二进制与黄金链接器 运行 链接速度更快吗?

Is binary linked with gold linker running faster?

运行ning 使用 GEANT4 的模拟代码(大型 Monte Carlo C++ 模拟框架,大量共享库)。使用黄金链接器和基于标准 BFD 的链接器编译并链接 GEANT 和我的应用程序。看起来金色的 运行 快一点(1'47" 对 1'51")。有人可以阐明造成差异的原因是什么吗? Ubuntu 15.04、64 位、海湾合作委员会 4.9.2。 运行每次测试10次左右,用的时间最少,没有其他activity,一个终端。

当然,不同的链接器会产生不同的结果,就像不同的编译器一样。结果主要取决于每个链接器上启用(和可用)的优化选项。这是您看到的差异的一个可能原因,但可能还有许多其他原因:

-fipa-icf

Perform Identical Code Folding for functions and read-only variables. The optimization reduces code size and may disturb unwind stacks by replacing a function by equivalent one with a different name. The optimization works more effectively with link time optimization enabled. Nevertheless the behavior is similar to Gold Linker ICF optimization, GCC ICF works on different levels and thus the optimizations are not same - there are equivalences that are found only by GCC and equivalences found only by Gold.

来自:https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

最后但同样重要的是:除了实际的二进制内容之外,还有许多环境因素会影响运行时。例如,缓存抖动会对执行时间产生相当大的影响。此外,10 次执行的集合对于统计结论来说太小了。

就统计数据而言,所用的最短时间不是有效的衡量标准。如果你真的很好奇,你需要计算每个程序的平均完成时间,然后将平均值的差异除以合并样本的标准偏差。

假设两个程序的平均完成时间完全相同,但一个程序花费的时间总是相同,而另一个程序的差异很大。选择完成速度最快的程序总是会选择后者,即使更一致的程序是性能更好的程序。