
24.08.2025, 14:17
|
|
Новичок
Регистрация: 26.07.2025
Сообщений: 0
С нами:
423479
Репутация:
0
|
|
Возврат к лучшему
Версия "без аллокаций", имеющая простую и понятную структуру циклов, показала значительный прирост производительности с флагом -march=native.
Версия с "развернутыми" вручную циклами, которая была немного быстрее в стандартной компиляции, с новым флагом оказалась медленнее.
Это произошло потому, что ручные изменения помешали компилятору применить его собственные, более совершенные эвристики, включая авто-векторизацию (использование SIMD-инструкций).
Тестирование кода ("без аллокаций") на 1 000 000 итераций:
Без -march=native: ~3643 мс
С -march=native: ~3005 мс
Основываясь на этих данных, было принято решение вернуть код криптографического ядра к версии "без аллокаций".
Этот вариант, будучи скомпилированным с флагом -march=native, является абсолютным чемпионом по производительности, оставаясь при этом 100% совместимым и надежным.
Рекомендуемые команды для сборки с помощью Clang
32-битная версия (x86):
clang++ -Wall -Wextra -O3 -march=native -std=c++20 -s -o "$(NAME_PART).exe" "$(FILE_NAME)" "qrcodegen.cpp" "miniz.c" -static -mwindows -municode -lcomctl32 -lgdi32 -luser32 -lbcrypt -lmapi32 -lshlwapi -lwer -lpsapi
64-битная версия (x64):
clang++ -m64 -Wall -Wextra -O3 -march=native -std=c++20 -s -o "$(NAME_PART)_x64.exe" "$(FILE_NAME)" "qrcodegen.cpp" "miniz.c" -static -mwindows -municode -lcomctl32 -lgdi32 -luser32 -lbcrypt -lmapi32 -lshlwapi -lwer -lpsapi
Скачать можно в облаке
disk.yandex.ru/d/pSxwq7mMhKsOwg
|
|
|