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


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

3 58

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 включает многие другие шаги оптимизации, которые в противном случае только включена по -О3.