Проблема
У нас есть программа среднего размера для задачи моделирования, которую мы должны оптимизировать. Мы уже сделали все возможное, чтобы оптимизировать источник до предела наших навыков программирования, включая профилирование с помощью Gprof и Valgrind.
Когда мы закончим, мы хотим запустить программу на нескольких системах, возможно, в течение нескольких месяцев. Поэтому мы действительно заинтересованы в том, чтобы оптимизировать ограничения.
Все системы будут запускать Debian/Linux на относительно новом оборудовании (Intel i5 или i7).
Вопрос
Каковы возможные варианты оптимизации с использованием последней версии g++, выходящей за пределы -O3/-Ofast?
Мы также заинтересованы в дорогостоящей незначительной оптимизации, которая будет выплачиваться в долгосрочной перспективе.
Что мы используем прямо сейчас
В настоящее время мы используем следующие варианты оптимизации g++:
-
-Ofast
: Самый высокий уровень "стандартного" уровня оптимизации. Включенный-ffast-math
не вызывал проблем в наших расчетах, поэтому мы решили пойти на это, несмотря на нестандартное соответствие. -
-march=native
: включение всех инструкций, относящихся к ЦП. -
-flto
, чтобы обеспечить оптимизацию времени соединения, в разных единицах компиляции.