Оптимизация кода значительно влияет на многопоточные системы.
В состав будущей версии ядра Linux 6.13 предложен патч , перерабатывающий алгоритм нахождения контрольной суммы CRC32C. Новая реализация позволила сократить объем кода примерно в десять раз — с 4546 байт до 418 байт. Уменьшение количества операций и оптимизация логики цикла принесли значительное ускорение, особенно заметное при отключенной защите retpoline от атак Spectre. Так, на процессорах AMD Zen 2 наблюдается прирост производительности до 11,8%, на Intel Emerald Rapids — 6,4%, а на Intel Haswell — 4,8%.
При включенной защите retpoline эффект от оптимизации еще более выражен: производительность на Intel Emerald Rapids увеличивается на 66,8%, на Intel Haswell — на 35,0%, а на AMD Zen 2 — на 29,5%.
Ранее CRC32C использовал 128 развернутых циклов (unroll), что заметно увеличивало объем кода. Поскольку современные процессоры поддерживают выполнение команд не по порядку (out of order), избыточное количество команд перехода внутри циклов стало препятствием для оптимизации. В новой реализации количество итераций сокращено до четырех, что позволило значительно уменьшить объем кода и одновременно улучшить скорость выполнения операции.
Никаких овечек — только отборные научные факты