Какое увеличение скорости я изменяю, если оптимизирую по размеру (z) вместо скорости (3)? - PullRequest
1 голос
/ 23 марта 2020

Я читаю оба:

Что я не понимаю, так это то, какое увеличение скорости я меняю, если использую:

[profile.release]
opt-level = "z"

вместо:

[profile.release]
opt-level = 3
  • Правильно ли, что сегодня opt-level = 3 - лучшая настройка (для секции opt-level) для скорости выполнения?

  • Если я вместо этого использую opt-level = "z", я уменьшаю производительность во время выполнения, верно ?

Меня не интересует скорость сборки / компиляции.

1 Ответ

7 голосов
/ 23 марта 2020

Это сложно.

Правда в том, что конвейер оптимизации компилятора в значительной степени основан на эвристиках .

Ряд оптимизация - это надежные вещи (такие как снижение прочности ), однако многие тяжелые атлеты (такие как inlining ) основаны на наборе эвристик.

Эвристика Конечно, не вытащил из воздуха. Они были тщательно настроены разработчиками компилятора на основе примера программ, которые были оценены как репрезентативные, и отшлифованы на основе отчетов клиентов.

Тем не менее, в конце дня они остаются эвристика и в результате некоторые программы работают быстрее с -Oz, чем с -O3, потому что используется другой набор эвристик.

...