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