Суть изменения: две строки кода
Инженер AMD Венкатараманан Кумар (Venkataramanan Kumar) предложил простой, но эффективный патч для GNU Compiler Collection (GCC). Изменение касается таблиц стоимости (cost tables) для архитектур Zen 4 и Zen 5. Суть правки — увеличение шкалы стоимости ошибки предсказания ветвлений (branch misprediction) на три единицы. Это заставляет компилятор более агрессивно оптимизировать код, избегая потенциально «дорогих» ветвлений, что критично для микроархитектуры Zen.
Результаты бенчмарков
Тестирование проводилось на сборке с флагами -O3 -march=native -flto. Результаты демонстрируют значимый прирост производительности в ключевом тесте SPEC CPU — 544.nab_r:
| Архитектура | Прирост производительности | Тест SPEC CPU |
|---|---|---|
| AMD Zen 5 (Zen 5) | +12% | 544.nab_r |
| AMD Zen 4 (Zen 4) | +9% | 544.nab_r |
Хотя тестирование ограничено одним бенчмарком, разработчики отмечают, что другие рабочие нагрузки также могут получить выгоду от этой настройки, так как она затрагивает фундаментальные параметры генерации кода.
Статус интеграции и сроки
Патч находится на этапе рецензирования в списке рассылки GCC. Учитывая его простоту и очевидную пользу, ожидается, что он войдет в релиз GCC 17 (планируется на следующий год). Также рассматривается возможность бэкпорта изменений в версию GCC 16.3 для более быстрого распространения среди пользователей.
Проблема актуальности профилей
Статья подчеркивает системную проблему: хотя AMD научилась быстрее добавлять новые архитектуры (например, Zen 6 появилась в GCC 16 еще в декабре), профилирование и тонкая настройка cost-таблиц часто отстают. Целевые профили Znver5 и Znver6 в GCC пока во многом опираются на данные от Znver4, а точные корректировки поступают с задержкой в несколько месяцев. Учитывая длинные циклы релизов GCC, это создает ситуацию, когда пользователи получают неоптимальную производительность «из коробки» до выхода обновлений компилятора.
Источник: Phoronix ↗
