Автоматически найти параметры компилятора для быстрого исполнения на данной машине? - PullRequest
7 голосов
/ 14 марта 2010

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

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

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

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

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

Ответы [ 8 ]

4 голосов
/ 14 марта 2010

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

4 голосов
/ 14 марта 2010

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

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

2 голосов
/ 14 марта 2010

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

2 голосов
/ 14 марта 2010

После некоторого поиска в Google я нашел этот скрипт: gcccpuopt .

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

-march=pentium4 -mfpmath=sse

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

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

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

2 голосов
/ 14 марта 2010

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

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

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

1 голос
/ 14 марта 2010

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

номер

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

0 голосов
/ 15 марта 2010

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

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

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

0 голосов
/ 15 марта 2010

Это решение, которое работает для меня, но для его настройки требуется некоторое время. В «Сценариях Python для вычислительной науки» Ханса Петтера Лангтангена (на мой взгляд, отличная книга) приведен пример использования короткого сценария на языке 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 ++ в вашем случае).

...