Показать сообщение отдельно

  #124  
Старый 16.09.2025, 14:23
guidesoul
Новичок
Регистрация: 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
 
Ответить с цитированием