Автоматически найдите параметры компилятора для самого быстрого exe на данной машине?

Существует ли метод для автоматического нахождения лучших параметров компилятора (на данной машине), которые приводят к самому быстрому исполняемому файлу?

Естественно, я использую g++ -O3, но существуют дополнительные флаги, которые могут сделать код выполненным быстрее, например. -ffast-math и другие, некоторые из которых аппаратно-зависимы.

Делает любой знает некоторый код, я могу вставить мой configure.ac файл (автоинструменты GNU), так, чтобы флаги были добавлены к Make-файлу автоматически ./configure команда?

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

Обновление: Большинство людей предлагает просто попробовать различные флаги и выбрать лучшие опытным путем. Для того метода у меня был бы последующий вопрос: существует ли утилита, которая перечисляет все флаги компилятора, которые возможны для машины, на которой я работаю (например, тестирует, если инструкции SSE доступны и т.д.)?

7
задан Frank 14 March 2010 в 19:04
поделиться

8 ответов

Гм - да. Это возможно. Изучите оптимизацию на основе профиля .

4
ответ дан 6 December 2019 в 19:35
поделиться

См. Также параметры -mcpu = native / -mtune = native gcc.

2
ответ дан 6 December 2019 в 19:35
поделиться

Погуглив, я нашел этот сценарий: gcccpuopt .

На одной из моих машин (32 бит) он выводит:

-march=pentium4 -mfpmath=sse

На другой машине (64 бит) он выводит:

$ ./gcccpuopt 
Warning: The optimum *32 bit* architecture is reported
-m32 -march=core2 -mfpmath=sse

Итак, это не идеально, но может быть полезно.

2
ответ дан 6 December 2019 в 19:35
поделиться

Существует ли метод автоматического поиска лучших параметров компилятора (на данной машине), которые приводят к максимально быстрому выполнению исполняемого файла?

Нет.

Вы можете скомпилировать свою программу с большим набором опций компилятора, затем протестировать каждую версию, а затем выбрать ту, которая является «самой быстрой», но она вряд ли надежна и, вероятно, бесполезна для вашей программы.

1
ответ дан 6 December 2019 в 19:35
поделиться

Это решение, которое мне подходит, но его настройка занимает некоторое время. В "Python Scripting for Computational Science" Ханса Петтера Лангтангена (отличная книга, на мой взгляд) приведен пример использования короткого скрипта Python для проведения численных экспериментов с целью определения наилучших вариантов компилятора для вашего C / Fortran / ... программа. Это описано в главе 1.1.11 «Вложенные гетерогенные структуры данных».

Исходный код примеров из книги находится в свободном доступе по адресу http://folk.uio.no/hpl/scripting/index.html (я не уверен в лицензии, поэтому не буду воспроизведите здесь любой код), и, в частности, вы можете найти код для аналогичного числового теста в коде в TCSE3-3rd-examples.tar.gz в файле src / app / wavesim2D / F77 / compile.py, который вы могли бы использовать в качестве основы для написания сценария, подходящего для конкретной системы / языка (C ++ в вашем случае).

0
ответ дан 6 December 2019 в 19:35
поделиться

I не думаю, что вы можете сделать это во время настройки, но есть по крайней мере одна программа, которая пытается оптимизировать флаги опций gcc для конкретного исполняемого файла и машины. См., Например, http://www.coyotegulch.com/products/acovea/ .

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

4
ответ дан 6 December 2019 в 19:35
поделиться

Оптимизация приложения - это в основном ваша работа, а не компилятор.

Вот пример того, о чем я говорю.

Как только вы это сделаете, ЕСЛИ ваше приложение привязано к вычислениям, с горячими точками в вашем коде (не в коде библиотеки), ТО оптимизация компилятора для скорости будет иметь некоторое значение, поэтому вы можете попробовать различные комбинации флагов.

-2
ответ дан 6 December 2019 в 19:35
поделиться

некоторые компиляторы предоставляют опцию "-fast" для автоматического выбора наиболее агрессивной оптимизации для данного хоста компиляции. http://en.wikipedia.org/wiki/Intel_C%2B%2B_Compiler

К сожалению, g++ не предоставляет подобных флагов.

как продолжение вашего следующего вопроса, для g++ вы можете использовать опцию -mtune вместе с -O3, что даст вам достаточно быстрые настройки по умолчанию. Затем необходимо определить тип процессора вашего компилирующего узла. Возможно, вы захотите посмотреть в архиве макросов autoconf, чтобы увидеть, что кто-то написал необходимые тесты. В противном случае, если вы используете linux, вы должны разобрать /proc/cpuinfo, чтобы получить тип процессора

2
ответ дан 6 December 2019 в 19:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: