Как использовать профильные оптимизации в g++?

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

3 ответа

Решение

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

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

Из этого примера:

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 параметр, и он компилирует его, используя профиль руководствуясь совершенством.

Сложность в настройке make-файлов.

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

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

Другие вопросы по тегам