
16.09.2025, 14:23
|
|
Новичок
Регистрация: 26.07.2025
Сообщений: 0
С нами:
423479
Репутация:
0
|
|
Оптимизация производительности ядра шифрования для различных архитектур ЦП
После внедрения ручной SSE2-оптимизации для ускорения основной криптографической функции было замечено неоднозначное поведение:
1. На старых процессорах без поддержки AVX производительность значительно увеличилась, как и ожидалось.
2. На современных процессорах с поддержкой AVX/AVX2 производительность упала и стала ниже, чем у оригинальной версии кода без явных SSE2-инструкций.
Причина
Современные компиляторы (в частности, Clang) способны самостоятельно и очень эффективно векторизовать (оптимизировать) стандартный C++ код для новейших архитектур (AVX2).
Ручная SSE2-оптимизация в этом случае мешает компилятору, создавая накладные расходы на переключение между наборами инструкций и используя менее эффективные 128-битные регистры там, где могли бы использоваться 256-битные.
Решение
Внедрена система динамического выбора кода во время выполнения:
1. При первом вызове криптографической функции программа выполняет однократную проверку возможностей центрального процессора.
2. Критерием выбора стал флаг поддержки AVX2, так как он является надежным маркером современных и производительных архитектур.
3. Если процессор поддерживает AVX2, программа будет использовать оригинальную, не векторизованную вручную версию кода, доверяя оптимизацию компилятору.
4. Если процессор не поддерживает AVX2, программа будет использовать быструю SSE2-версию, которая на таком оборудовании дает максимальный прирост.
Результат
Программа автоматически использует самый быстрый из доступных вариантов кода, обеспечивая максимальную производительность шифрования как на устаревшем, так и на современном оборудовании.
Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
|
|
|