Как использовать профильные оптимизации в g ++? - PullRequest
64 голосов
/ 06 декабря 2010

Кроме того, кто-нибудь может указать мне хороший учебник по этому вопросу?Я не могу найти ни одного.

Ответы [ 3 ]

50 голосов
/ 06 декабря 2010

-fprofile-generate будет снабжать приложение профилирующим кодом. Во время работы приложение будет регистрировать определенные события, которые могут повысить производительность, если этот шаблон использования был известен во время компиляции. Ветви, возможность встраивания и т. Д. Могут быть зарегистрированы, но я не уверен в деталях, как GCC реализует это.

После выхода из программы все эти данные будут выгружены в файлы * .gcda, которые по сути являются данными журнала для тестового запуска. После перестройки приложения с флагом -fprofile-use GCC при оптимизации учитывает данные журнала * .gcda, что обычно значительно повышает производительность. Конечно, это зависит от многих факторов.

20 голосов
/ 15 октября 2013

С этот пример :

g++ -O3 -fprofile-generate [more params here, like -march=native ...] -o executable_name
// run my program's benchmarks, or something to stress its most common path
g++ -O3 -fprofile-use [more params here, like -march=native...] -o executable_name

По сути, вы изначально компилируете и связываете с этим дополнительным флагом для компиляции и компоновки: -fprofile-generate здесь ).

Затем, когда вы запускаете его, по умолчанию он создает файлы .gcda «рядом» с вашими .o файлами, кажется (жестко запрограммирован на полный путь, по которому они были построены).

При желании вы можете изменить место, где он создает эти файлы .gcda, с параметром -fprofile-dir = XXX .

Затем вы перекомпилируете и перекомпоновываете, используя параметр -fprofile-use, и он компилирует его, следуя указаниям профиля.

2 голосов
/ 06 декабря 2010

Хитрость заключается в настройке make-файлов.

Вам определенно нужны отдельные выходные каталоги для объектных файлов. Я бы порекомендовал назвать их «профиль» и «релиз». Возможно, вам придется скопировать файлы * .gcda, полученные в результате запуска профиля, чтобы GCC обнаружил их на этапе сборки выпуска.

Результат почти наверняка будет быстрее. Вероятно, будет больше. Опция -fprofile-use включает множество других шагов оптимизации, которые в противном случае включаются только -O3.

...