使用GEANT4 (大型蒙特卡罗C++仿真框架,大量共享库)运行仿真代码。编译和链接GEANT和我的应用程序与黄金链接和标准BFD的链接。看上去黄金一号跑得更快了(1'47“比1'51")。有人能说出差异的原因是什么吗?Ubuntu 15.04,64位,GCC 4.9.2。每次测试运行大约10次,最低的时间,没有其他活动,一个终端。
发布于 2015-05-03 05:59:09
当然,不同的链接器会产生不同的结果,就像不同的编译器所做的那样。结果主要取决于在每个链接器上启用(和可用)的优化选项。以下是您所看到的差异的一个可能原因,但也可能有许多其他原因:
-fipa-icf 对函数和只读变量执行相同的代码折叠.优化减少了代码大小,并可能通过将等效的函数替换为不同的名称来破坏堆栈。在启用链接时间优化时,优化工作更有效。然而,GCC的优化行为类似于Gold Linker ICF的优化,因此它们的优化是不一样的--有些等价性仅由GCC发现,而等价性仅由Gold发现。
来自:https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
最后但并非最不重要的一点是:除了实际的二进制内容之外,还有许多环境因素可以影响运行时。例如,缓存重击会对执行时间产生相当大的影响。此外,10次处决的数量太少,无法得出统计结论。
发布于 2015-06-01 02:14:48
就统计数字而言,最低时间并不是一项有效的措施。如果您真的很好奇,您需要计算每个程序的平均完成时间,然后将平均值的差异除以集合样本的标准偏差。
假设两个程序的平均完成时间完全相同,但其中一个程序的时间总是相同的,另一个程序的时间变化很大。选择一个完成速度最快的程序总是会选择后者,即使更一致的程序是性能更好的程序。
https://stackoverflow.com/questions/30010588
复制相似问题