Ubuntu下用Clang通过CMake构建支持AVX指令集项目的方案问询
Ubuntu下使用Clang+CMake构建支持AVX指令集的ONNX Runtime项目
前置检查
- 确认CPU硬件支持目标AVX指令集:执行
lscpu | grep -E 'avx|avx2|avx512'验证硬件支持情况。 - 安装适配的Clang版本:Ubuntu下可通过
sudo apt install clang clang++安装,推荐使用Clang 14+版本以获得完善的AVX512支持。
调整CMake配置
在项目的CMakeLists.txt中添加以下配置,确保Clang正确启用AVX指令集编译:
# 开启ONNX Runtime的AVX系列指令集选项 option(onnxruntime_USE_AVX "Enable AVX instructions" ON) option(onnxruntime_USE_AVX2 "Enable AVX2 instructions" ON) option(onnxruntime_USE_AVX512 "Enable AVX512 instructions" ON) # 针对Clang设置编译与链接参数 if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") set(CPU_INSTRUCTION_FLAGS "") if(onnxruntime_USE_AVX) list(APPEND CPU_INSTRUCTION_FLAGS "-mavx") endif() if(onnxruntime_USE_AVX2) list(APPEND CPU_INSTRUCTION_FLAGS "-mavx2" "-mfma") endif() if(onnxruntime_USE_AVX512) list(APPEND CPU_INSTRUCTION_FLAGS "-mavx512f" "-mavx512skx") endif() add_compile_options(${CPU_INSTRUCTION_FLAGS}) add_link_options(${CPU_INSTRUCTION_FLAGS}) endif()
构建命令
清理旧构建缓存并执行CMake构建,明确指定Clang为编译器:
# 创建并进入构建目录 rm -rf build && mkdir build && cd build # 配置CMake,指定编译器与指令集参数 CC=clang CXX=clang++ cmake .. \ -DCPU_BASELINE=AVX512_SKX \ -Donnxruntime_USE_AVX=ON \ -Donnxruntime_USE_AVX2=ON \ -Donnxruntime_USE_AVX512=ON # 并行加速构建 make -j$(nproc)
验证指令集生效
使用objdump检查生成的二进制文件是否包含AVX系列指令:
# 检查AVX/AVX2特征指令 objdump -d path/to/your/onnxruntime_binary | grep -E 'vmovups|vaddps|vmulps' # 检查AVX512特征指令 objdump -d path/to/your/onnxruntime_binary | grep -E 'vmovdqa64|vaddpsz|vpbroadcastd'
注意事项
- 若指定
CPU_BASELINE=DETECT,CMake会自动检测当前CPU支持的最高指令集,但需确保Clang的检测逻辑正常工作。 - 若构建后仍未生成AVX指令,可通过
cmake .. -LAH查看所有生效的CMake变量,检查ONNX Runtime内部配置是否覆盖了自定义编译参数。
内容的提问来源于stack exchange,提问作者Akash Sagar
相关产品推荐
相关产品推荐

