feat(compilation): 启用 ARM64 优化与 OpenMP 并行支持
- 在 `.cmake/arm_optimization.cmake` 中增强 ARM64 编译优化选项,包括: * 添加 `-mtune=cortex-a76` 和更多特定于 ARM64 的优化标志 * 启用循环优化、浮点运算优化及链接时优化(LTO) - 在 `CMakeLists.txt` 中新增 `ENABLE_OPENMP` 选项以启用 OpenMP 支持 - 优化 `randombytes_ctrdrbg.c` 中的 AES 密钥调度和随机数生成逻辑,利用 ARM64 Crypto 扩展提升性能 - 在 `lll_tests.c` 中对关键循环进行展开以降低分支开销 - 在签名密钥生成和提交阶段引入 OpenMP 并行化处理,加快理想采样过程 - 注释掉未使用的机器学习日志函数 `ml_log_ideal_attempt` 实现 - 调整默认 `GF_RADIX` 为 64,并更新相关编译配置
This commit is contained in:
@@ -23,39 +23,51 @@ if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64" OR ${CMAKE_SYSTEM_PROCESSOR} MAT
|
||||
add_compile_options(-march=armv8-a+crypto)
|
||||
add_compile_definitions(HAVE_ARM64_CRYPTO)
|
||||
endif()
|
||||
|
||||
# CPU特定优化
|
||||
# 根据实际部署平台选择合适的CPU型号
|
||||
add_compile_options(-mtune=cortex-a76) # 默认使用cortex-a76
|
||||
|
||||
# 更多ARM64优化选项
|
||||
add_compile_options(
|
||||
-moutline-atomics # 内联原子操作
|
||||
-mstrict-align # 严格对齐优化
|
||||
)
|
||||
|
||||
else()
|
||||
# ARM32架构
|
||||
add_compile_options(-march=armv7-a -mfpu=neon)
|
||||
endif()
|
||||
|
||||
# 通用ARM优化选项
|
||||
# 启用循环展开和其他优化
|
||||
add_compile_options(-O3 -funroll-loops)
|
||||
add_compile_options(
|
||||
-O3 # 最高级别优化
|
||||
-funroll-loops # 循环展开
|
||||
-fomit-frame-pointer # 省略帧指针
|
||||
-frename-registers # 重命名寄存器
|
||||
-fipa-pta # 点对点分析
|
||||
-floop-optimize # 循环优化
|
||||
-fprefetch-loop-arrays # 预取循环数组
|
||||
-funroll-all-loops # 展开所有循环
|
||||
-fpeel-loops # 循环剥离
|
||||
)
|
||||
|
||||
# 浮点运算优化
|
||||
add_compile_options(
|
||||
-ffast-math # 快速数学运算
|
||||
-ffp-contract=fast # 快速浮点收缩
|
||||
-funsafe-math-optimizations # 不安全的数学优化
|
||||
-ftree-vectorize # 树向量化
|
||||
)
|
||||
|
||||
# 启用链接时优化(LTO)
|
||||
include(CheckIPOSupported)
|
||||
check_ipo_supported(RESULT result)
|
||||
if(result)
|
||||
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
|
||||
# 检查编译器是否支持 thin LTO
|
||||
include(CheckCCompilerFlag)
|
||||
# check_c_compiler_flag("-flto=thin" HAS_THIN_LTO)
|
||||
# if(HAS_THIN_LTO)
|
||||
# add_compile_options(-flto=thin)
|
||||
# else()
|
||||
# # 回退到普通 LTO
|
||||
# add_compile_options(-flto)
|
||||
# endif()
|
||||
add_compile_options(-flto=auto)
|
||||
endif()
|
||||
|
||||
# 启用快速数学运算(可能影响精度)
|
||||
# add_compile_options(-ffast-math)
|
||||
|
||||
# 针对特定CPU的优化
|
||||
# 可以根据目标设备替换为具体的CPU型号,如"cortex-a72"等
|
||||
add_compile_options(-mtune=cortex-a76)
|
||||
|
||||
message(STATUS "ARM optimizations enabled for ${CMAKE_SYSTEM_PROCESSOR}")
|
||||
|
||||
# 添加NEON支持的定义
|
||||
|
||||
@@ -51,6 +51,11 @@ else()
|
||||
message("Warning: system architecture not detected, defaulting to 64 bit")
|
||||
endif()
|
||||
|
||||
# 修改默认GF_RADIX为64
|
||||
if (NOT DEFINED GF_RADIX)
|
||||
set(GF_RADIX 64)
|
||||
endif()
|
||||
|
||||
if (NOT GF_RADIX STREQUAL "AUTO")
|
||||
if (NOT((GF_RADIX EQUAL 64) OR (GF_RADIX EQUAL 32)))
|
||||
message(FATAL_ERROR "Currently supported options for GF_RADIX: 32 or 64. Aborting")
|
||||
@@ -97,4 +102,4 @@ if (NOT DEFINED SQISIGN_TEST_REPS)
|
||||
set(SQISIGN_TEST_REPS 10)
|
||||
endif()
|
||||
|
||||
add_compile_definitions(SQISIGN_TEST_REPS=${SQISIGN_TEST_REPS})
|
||||
add_compile_definitions(SQISIGN_TEST_REPS=${SQISIGN_TEST_REPS})
|
||||
Reference in New Issue
Block a user