Как использовать профилированные оптимизации в 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.