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

使用GEANT4(大蒙特卡罗C ++仿真框架,大量共享库)运行仿真代码。 编译和链接GEANT和我的应用程序与黄金链接器和标准的基于BFD的链接器。 看起来金牌运行速度更快(1'47“vs 1'51”)。 有人可以说明这个差别的原因吗? Ubuntu 15.04,64位,GCC 4.9.2。 运行每个testing约10次,最less的时间,没有其他活动,一个terminal。

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

-fipa-ICF

为函数和只读变量执行相同的代码折叠。 该优化减少了代码的大小,并且可能会通过用不同名称的等价函数替换函数来扰乱展开堆栈。 启用链接时间优化后,优化更有效。 尽管如此,行为与Gold Linker ICF优化类似, GCC ICF在不同级别上工作,因此优化不尽相同 – 只有GCC才能找到相同的结果,只有Gold才能找到相同的结果

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

最后但并非最不重要:除了实际的二进制内容外,还有许多环境因素会影响运行时间。 例如,高速缓存抖动会对执行时间产生相当大的影响。 另外,对于统计结论,10个处决的集合太小了。

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

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