Files
sqisign_new/.cmake/arm_optimization.cmake
StarsAC 0c2d61119b 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,并更新相关编译配置
2025-11-26 15:51:27 +08:00

75 lines
2.6 KiB
CMake

# SPDX-License-Identifier: Apache-2.0
# ARM架构优化配置文件
# 检查是否为ARM架构
if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm64" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm")
# 启用NEON指令集优化
if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm64")
# ARM64架构
add_compile_options(-march=armv8-a+simd)
# 如果支持 crypto 扩展,则启用
include(CheckCSourceCompiles)
check_c_source_compiles("
#include <arm_neon.h>
int main() {
uint8x16_t a = vdupq_n_u8(0);
uint8x16_t b = vaeseq_u8(a, vdupq_n_u8(0));
return 0;
}" HAVE_ARM64_CRYPTO)
if (HAVE_ARM64_CRYPTO)
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 # 循环展开
-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)
add_compile_options(-flto=auto)
endif()
message(STATUS "ARM optimizations enabled for ${CMAKE_SYSTEM_PROCESSOR}")
# 添加NEON支持的定义
add_compile_definitions(HAVE_NEON)
endif()