Профиль: Аноним (вход | регистрация) неRU opennet.me  
The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Однострочное изменение в GCC привело к ускорению на 12% в одном тесте и замедлению на 14% в другом

24.06.2026 18:43 (MSK)

Инженер из компании Intel внёс в набор компиляторов GCC однострочное изменение, увеличивающее вес неверного предсказания ветвления на процессорах x86. Изменение позволило повысить производительность генерируемого кода при прохождении теста 544.nab_r на 12.7% при включении оптимизаций "-O2 -mtune=graniterapids" для CPU Intel Granite Rapids/Xeon 6 и на 12.1% при включении оптимизаций "-O2 -mtune=znver5" на CPU AMD Zen5.

Изменение веса с "COSTS_N_INSNS (2)" до "COSTS_N_INSNS (2) + 3" увеличивает значимость ошибки предсказания c 2 до 5 условных инструкций, что лучше отражает особенности конвейеров обработки команд (pipeline) в современных CPU, в которых ошибки предсказания ветвления более затратны. Изменение веса приводит к форсированию преобразования компилятором выражений "if" в условные команды без переходов, такие как CMOV, исключающие приостановки при неверном предсказании ветвления, вызванные необходимостью сброса состояния конвейера. Ранее вес "COSTS_N_INSNS (2) + 3" указывался в GCC только для процессоров Intel Ice Lake и Alder Lake, а теперь выставлен для общего (generic) профиля процессоров x86.

Примечательно, что после принятия патча всплыла регрессия, из-за которой тест "Hint" стал выполняться у одного из разработчиков GCC на 30% медленнее при сборке с опциями "-march=generic -mtune=znver5" и "-march=generic -mtune=graniterapids". Производительность прохождения тестов SPEC2017 и SPEC2026 после внесения изменения осталась на прежнем уровне. Наличие регрессии подтверждено автором изначального коммита, по его данным замедление прохождения теста Hint составляет 14% при сборке с опциями "-O2 -mtune=generic -march=x86-64-v3".

Замедление объясняется тем, что в коде теста Hint имеется только одна условная конструкция, преобразуемая GCC в представление на базе CMOV. Данная конструкция выполняется достаточно редко (в 3%) и её оптимизация не влияет на производительность. При этом изменение режима генерации кода привело к побочному эффекту, замедлившему выполнение более часто выполняемого кода.

  1. Главная ссылка к новости (https://www.phoronix.com/news/...)
  2. OpenNews: В GCC утверждено добавление бэкенда для WebAssembly
  3. OpenNews: Релиз набора компиляторов GCC 16
  4. OpenNews: Представлен бэкенд TPDE-LLVM, работающий в 10-20 раз быстрее LLVM в режиме без оптимизации
  5. OpenNews: В ядрах для платформы Android включена оптимизация AutoFDO
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/65757-gcc
Ключевые слова: gcc, optimization, benchmark
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (22) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Аноним (2), 19:14, 24/06/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • –15 +/
    Инженер из интел ускорил интел и замедлил амд? It's fine.
     
     
  • 2.3, Аноним (3), 19:17, 24/06/2026 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Вы хоть осильте прочитать то, "комментаторы".
     
     
  • 3.4, Аноним (2), 19:20, 24/06/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    -mtune=znver5

    what seems to be the officer, problems?

     
     
  • 4.8, Rev (ok), 19:24, 24/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    А ещё замедлило и дженерик x86:
    -mtune=generic -march=x86-64-v3
     
     
  • 5.21, Аноним (21), 21:07, 24/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > А ещё замедлило и дженерик x86

    Какое необычное нововведение от инженера интела!

     
     
  • 6.24, Аноним (3), 21:10, 24/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    А вы представитель сообщества и уже предложили свои изменения ?
    Думали комментарием отделаться, нет уж идите пишите!
     
  • 3.5, Аноним (5), 19:20, 24/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Но именно это там и написано.
     
     
  • 4.6, Аноним (6), 19:21, 24/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Нет
     
     
  • 5.22, Аноним (21), 21:08, 24/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    ... на 30% медленнее при сборке с опциями "-march=generic -mtune=znver5"
     
  • 4.7, Аноним (3), 19:23, 24/06/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Повышение для CPU Intel Granite Rapids/Xeon 6 на 12.7%
    Повышение на 12.1% при включении в оптимизаций на CPU AMD Zen5
     
     
  • 5.9, Аноним (2), 19:39, 24/06/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    это для теста 544.nab_r, прочитайте про тест Hint в третьем абзаце
     
     
  • 6.11, Аноним (3), 19:48, 24/06/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да я всё прочитал и заголовок и четыре абзаца текста.
     
     
  • 7.18, Аноним (2), 20:59, 24/06/2026 Скрыто ботом-модератором     [к модератору]
  • +1 +/
     
  • 3.10, Аноним (10), 19:48, 24/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Да, автор изначального комментария не прочитал текст полностью, но я в голосину проорал с его комментария
     
     
  • 4.14, Аноним (14), 20:37, 24/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Автор читал оригинальную переписку. Проблема обнаружилась на AMD, где представитель компании ответил, что они OK с этим.
     
  • 3.19, Аноним (21), 21:06, 24/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > на 30% медленнее при сборке с опциями "-march=generic -mtune=znver5"
     

  • 1.13, хрю (?), 20:33, 24/06/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >struct processor_costs i386_cost = {    /* 386 specific costs */
    >struct processor_costs i486_cost = {    /* 486 specific costs */
    >struct processor_costs pentium_cost = {

    Внушает +)))

     
     
  • 2.17, Аноним (17), 20:56, 24/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Внушает +)))

    Да не, там еще и высокоуровневые оптимизации есть, правда на диалекте лиспа:
    [CODE]
    /* Optimize (X + (X >> (prec - 1))) ^ (X >> (prec - 1)) into abs (X).  */
    (simplify
    (bit_xor:c (plus:c @0 (rshift@2 @0 INTEGER_CST@1)) @2)
    (if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (@0))
          && !TYPE_UNSIGNED (TREE_TYPE (@0))
          && wi::to_widest (@1) == element_precision (TREE_TYPE (@0)) - 1)
      (abs @0)))
    [/CODE]
    и высокоуровневое описание железок на нем же:
    https://github.com/gcc-mirror/gcc/blob/master/gcc/config/gcn/gcn.md
    https://github.com/gcc-mirror/gcc/blob/master/gcc/config/arm/arm.md
    и промежуточные представления типа GIMPLE и RTL с оптимизацией там же.

    Вот на этом фоне особенно з̵а̵б̵а̵в̵л̵я̵ю̵т̵ внушают классические опеннетные разглагольствования на тему "сишечка потому и быстрая, потому что простая и любой настоящий ш̵о̵т̵л̵а̵н̵д̵е̵ц̵ погроммист может предсказать геренируемый машинный код!" 😀

     
  • 2.20, Аноним (3), 21:07, 24/06/2026 [^] [^^] [^^^] [ответить]  
  • +/
    https://en.wikipedia.org/wiki/GNU_Compiler_Collection#Architectures
     

  • 1.23, Bottle (?), 21:09, 24/06/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    То есть аппаратура стала настолько сложной, что в ней неспособны досконально разобраться даже штатные инженеры?
    Как мы должны читать эту новость?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2026 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру