2015-05-03 1 views
0

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

ответ

3

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

-fipa-МКФ

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

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

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

+0

Это определенно некоторое выравнивание/расположение памяти по-разному. Выполните больше случаев и разницу между 3+ сек здесь. Спасибо за ввод –

0

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

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

+1

Это действительный показатель производительности программы. Меня не интересуют статистика, среднее время выполнения, дисперсия времени выполнения и т. Д. Вариация может быть вызвана тем, что какой-то демон просыпается, пользователь нажимает клавиши параллельно, запускает другую программу и т. Д. То, что я искал, - это то, как быстро может работать код, и собирать хвост дистрибутива - это правильно сделать –

+0

@Michael: не могли бы вы дать некоторую ссылку для этого, спасибо –

Смежные вопросы