【问题标题】:Is binary linked with gold linker running faster?与黄金链接器链接的二进制文件运行得更快吗?
【发布时间】:2015-07-12 16:26:47
【问题描述】:

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

【问题讨论】:

    标签: c++ ubuntu linker ld gold-linker


    【解决方案1】:

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

    -fipa-icf

    对函数和只读变量执行相同的代码折叠。优化减少了代码大小并可能干扰展开 通过用不同的等效函数替换函数来堆叠 姓名。优化在链接时间上更有效 启用优化。然而,行为类似于黄金 链接器 ICF 优化,GCC ICF 在不同级别上工作,因此 优化不一样 - 找到了等价物 仅由 GCC 和仅由 Gold 发现的等效项

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

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

    【讨论】:

    • 这肯定是一些内存对齐/布局不同。运行更多案例和大约 3 秒以上的差异在这里。感谢您的输入
    【解决方案2】:

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

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

    【讨论】:

    • 它是衡量程序性能的有效方法。我对统计数据、运行时间平均值、运行时间方差等不感兴趣。变化可能是由于某些守护进程唤醒、用户同时敲击键、另一个程序正在运行等。我寻找的是代码可以运行多快,并且选择分布的尾部是正确的做法
    • @Michael: 很好,你能提供一些参考吗,谢谢
    猜你喜欢
    • 2016-11-27
    • 2015-08-17
    • 2015-03-19
    • 2015-09-07
    • 2015-02-27
    • 2014-03-31
    • 2014-07-08
    • 2017-12-12
    • 1970-01-01
    相关资源
    最近更新 更多