Кроме того, может ли кто-нибудь указать мне хороший учебник по этому вопросу? Я не могу найти.
Как использовать профилированные оптимизации в g++?
Ответ 1
-fprofile-generate будет обрабатывать приложение с помощью кода профилирования. При запуске приложение будет регистрировать определенные события, которые могут повысить производительность, если этот шаблон использования был известен во время компиляции. Ветви, возможность для inlining и т.д. Могут быть зарегистрированы, но я не уверен подробно, как GCC реализует это.
После выхода программы он выгрузит все эти данные в файлы *.gcda, которые по существу являются данными журнала для тестового прогона. После восстановления приложения с использованием флага использования -fprofile, GCC будет учитывать данные журнала .gcda при выполнении своих оптимизаций, как правило, значительно увеличивая производительность. Конечно, это зависит от многих факторов.
Ответ 2
От этот пример:
g++ -O3 -fprofile-generate [more params here, like -march=native ...] -o executable_name
// run my program 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
, и он скомпилирует его, используя добротную ориентацию профиля.
Ответ 3
Сложный бит - это настройка make файлов.
Вам обязательно нужны отдельные выходные каталоги для объектных файлов. Я бы рекомендовал называть их "профиль" и "выпуск". Возможно, вам придется скопировать файлы *.gcda, которые являются результатом прогона профиля, чтобы GCC обнаружил их на этапе сборки выпуска.
Результат почти наверняка будет быстрее. Вероятно, он будет больше. Опция -fprofile-use включает множество других шагов оптимизации, которые в противном случае разрешены только -O3.