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

Инженер от Intel направи едно единствено изменение в GCC компилаторите, което увеличава тежестта на неправилното предсказание на клонове на x86 процесорите. Промената доведе до повишаване на производителността на генерирания код с 12.7% при теста 544.nab_r, когато се активират оптимизации „-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, които изключват паузите при неправилно предсказание на клона, причинени от необходимостта от ресетиране на състоянието на pipeline. Преди, „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