1

使用 GEANT4(大型 Monte Carlo C++ 仿真框架,大量共享库)运行仿真代码。使用黄金链接器和基于标准 BFD 的链接器编译和链接 GEANT 和我的应用程序。看起来金色的跑得快一点(1'47" vs 1'51")。有人可以阐明造成这种差异的原因是什么?Ubuntu 15.04、64 位、GCC 4.9.2。每个测试运行大约 10 次,所用时间最短,没有其他活动,一个终端。

4

2 回答 2

3

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

-fipa-icf

对函数和只读变量执行相同的代码折叠。该优化减少了代码大小,并可能通过将函数替换为具有不同名称的等效函数来干扰展开堆栈。启用链接时间优化后,优化工作更有效。尽管如此,其行为类似于 Gold Linker ICF 优化,GCC ICF 在不同级别上工作,因此优化并不相同 - 存在仅由 GCC 发现的等价物和仅由 Gold 发现的等价物

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

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

于 2015-05-03T05:59:09.860 回答
0

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

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

于 2015-06-01T02:14:48.237 回答