Едно редово изменение в GCC доведе до ускорение с 12% в един тест и забавяне с 14% в друг.

Инженер от компанията 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" увеличава значимостта на грешката в предсказанието от 2 до 5 условни инструкции, което по-добре отразява характеристиките на конвейерите за обработка на команди (pipeline) в съвременните CPU, където грешките в предсказанието на разклонението са по-скъпи. Изменението на теглото води до принудително преобразуване от компилатора на изрази "if" в условни команди без преходи, като CMOV, които изключват забавяния при неверно предсказание на разклонението, причинени от необходимостта от нулиране на състоянието на конвейера. По-рано теглото "COSTS_N_INSNS (2) + 3" беше зададено в GCC само за процесори Intel Ice Lake и Alder Lake, а сега е зададено за общ (generic) профил на процесорите x86.

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

Забавянето се обяснява с факта, че в кода на теста Hint има само една условна конструкция, преобразувана от GCC в представление на база CMOV. Тази конструкция се изпълнява сравнително рядко (в 3%) и нейната оптимизация не оказва влияние върху производителността. В същото време изменението в режима на генериране на кода доведе до страничен ефект, който забави изпълнението на по-често изпълнявания код.

Източник: opennet.ru

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster