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