Связан ли бинарный файл с золотым компоновщиком быстрее?
Запуск симуляционного кода с использованием GEANT4 (большой фреймворк Monte Carlo C++, множество общих библиотек). Скомпилированный и связанный GEANT и мое приложение с золотым компоновщиком и со стандартным компоновщиком на основе BFD. Похоже, золото работает немного быстрее (1'47"против 1'51"). Может ли кто-то пролить свет на то, что послужит причиной такой разницы? Ubuntu 15.04, 64bit, GCC 4.9.2. Запускайте каждый тест примерно 10 раз, самое низкое время, никакой другой активности, один терминал.
2 ответа
Естественно, разные компоновщики будут давать разные результаты, как это делают разные компиляторы. Результат в основном зависит от параметров оптимизации, которые включены (и доступны) для каждого компоновщика. Вот одна из возможных причин различий, которые вы видите, но может быть множество других:
-fipa-МКФ
Выполните свертывание идентичного кода для функций и переменных только для чтения. Оптимизация уменьшает размер кода и может нарушить стеки раскрутки, заменив функцию эквивалентной с другим именем. Оптимизация работает более эффективно при включенной оптимизации времени соединения. Тем не менее, поведение похоже на оптимизацию Gold Linker ICF, GCC ICF работает на разных уровнях и, следовательно, оптимизации не одинаковы - есть эквивалентности, которые можно найти только в GCC, и эквивалентности, найденные только в Gold.
от: https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
И последнее, но не менее важное: помимо фактического двоичного содержимого на среду выполнения может влиять множество факторов окружающей среды. Например, очистка кэша может оказать значительное влияние на время выполнения. Также набор из 10 казней слишком мал для статистических выводов.
Что касается статистики, то самое низкое время не является допустимым показателем. Если вам действительно любопытно, вам нужно вычислить среднее время до завершения для каждой программы, а затем разделить разницу в средних значениях на стандартное отклонение объединенной выборки.
Предположим, что обе программы имели одинаковое среднее время до завершения, но одна всегда занимала одинаковое количество времени, другая имела огромные различия. Выбор одного с самым быстрым завершением всегда будет выбирать последний, даже если более последовательная программа - та, которая имеет лучшую производительность.