--- title: Подбор ключей компиляции GCC category: Программирование tags: программирование, C, C++, отладка, оптимизация summary: ... Подбор ключей компиляции основан на измерениях характеристик во время выполнения программы. На первом этапе создаётся исполняемый файл `program`, в который включается информация для профилировки. Ключ `-fprofile-generate=data/pgo` указывает, что нужно собирать информацию и сохранять в каталог `data/pgo`. Компиляцию следует выполнять в последовательном режиме. ```sh env CXXFLAGS='-fprofile-generate=data/pgo' cmake .. -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" make -j1 ``` После компиляцию программу следует выполнить, придерживаясь типичного сценария использования. ```sh ./program ``` Скомпилировать программу с использованием полученной статистики. Для многопоточной программы следует указать флаг `-fprofile-correction`, чтобы скорректировать данные, которые могут неустойчивыми из-за пропусков обновлений счётчиков. Компиляцию следует выполнять в последовательном режиме. ```sh env CXXFLAGS='-fprofile-use=data/pgo -fprofile-correction' cmake .. -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" make -j1 ```