Связано ли бинарное соединение с золотым линкером быстрее?

Запуск имитационного кода с использованием GEANT4 (крупная система моделирования на основе Монте-Карло C ++, множество разделяемых библиотек). Составил и связал GEANT и мое приложение с золотым линкером и со стандартным компоновщиком на основе BFD. Похоже, что золото работает немного быстрее (1’47 “против 1’51”). Может ли кто-то пролить свет, что послужило бы причиной разницы? Ubuntu 15.04, 64bit, GCC 4.9.2. Запускайте каждый тест примерно 10 раз, самое низкое время, никакой другой активности, один терминал.

Естественно, разные линкеры будут давать разные результаты, как это делают разные компиляторы. Результат в основном зависит от параметров оптимизации, которые включены (и доступны) для каждого компоновщика. Вот одна из возможных причин различий, которые вы видите, но могут быть и другие:

-fipa-МКФ

Выполните идентификационную сгибание кода для функций и переменных только для чтения. Оптимизация уменьшает размер кода и может мешать разворачивать стеки, заменяя функцию эквивалентной с другим именем. Оптимизация работает более эффективно с включенной оптимизацией времени соединения. Тем не менее, поведение похоже на оптимизацию ICF Gold Linker, GCC ICF работает на разных уровнях, и, следовательно, оптимизация не одинакова – существуют эквивалентности, которые обнаруживаются только GCC и эквивалентности, найденные только Gold .

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

И последнее, но не менее важное: существует множество факторов окружающей среды, которые могут повлиять на время выполнения, помимо фактического двоичного содержимого. Например, переполнение кэша может существенно повлиять на время выполнения. Кроме того, набор статистических выводов слишком мал для 10 случаев.

Что касается статистики, то самое низкое время не является действительной мерой. Если вам действительно интересно, вам нужно вычислить среднее время до завершения для каждой программы, а затем разделить разницу в средних значениях на стандартное отклонение объединенного образца.

Предположим, что обе программы имели одно и то же среднее время до завершения, но каждый раз занимал одинаковое количество времени, а другой имел огромные различия. Выбор одного из них с самым быстрым завершением всегда выбирал бы последнее, хотя более последовательная программа – это лучшая производительность.