2019-04-20 20:24:14 +00:00
|
|
|
|
---
|
2019-04-23 16:40:55 +00:00
|
|
|
|
title: "Подбор ключей компиляции GCC"
|
2019-04-20 20:24:14 +00:00
|
|
|
|
category: Программирование
|
2019-04-23 17:40:06 +00:00
|
|
|
|
tags: программирование, C, C++, отладка, оптимизация,
|
2019-04-20 20:24:14 +00:00
|
|
|
|
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
|
|
|
|
|
```
|