Ubuntu 20.04 aarch64下HPL-2.3链接OpenBLAS OpenMP库的编译选项疑问
关于HPL与OpenMP版本OpenBLAS构建的疑问解答
结论
你完全正确——构建HPL时不需要在编译选项中添加-fopenmp。
详细解释
HPL本身的并行模型
HPL(High Performance Linpack)的并行化完全基于MPI实现,它的源码里确实没有任何OpenMP编译指令(你通过grep -r omp验证过这一点)。这意味着HPL本身的编译和运行不需要依赖OpenMP,所以没必要在HPL的编译阶段加入-fopenmp选项。链接OpenMP版OpenBLAS的逻辑
当你链接的是使用OpenMP编译的OpenBLAS共享库时,共享库本身已经包含了对OpenMP运行时的依赖。链接器在处理HPL的链接过程中,会自动识别并链接这些依赖,不需要你在HPL的编译命令中额外指定-fopenmp。简单来说:HPL只需要调用OpenBLAS提供的线性代数接口,至于OpenBLAS内部是用串行还是OpenMP并行实现的,HPL不需要关心——这正是共享库封装的意义所在。
注意事项
- 确认链接库版本:确保你的
Make.myconfig文件中指定的是OpenMP版本的OpenBLAS共享库(通常文件名会带有_openmp标识,比如libopenblas_openmp.so),而不是串行版本。 - 运行时配置OpenMP:在启动HPL之前,记得设置OpenMP的线程数环境变量,比如:
这个值需要根据你的CPU核心数以及MPI进程数来合理调整,避免CPU资源过度竞争。export OMP_NUM_THREADS=4 - MPI与OpenMP的混合调度:如果你的HPL是基于MPI并行运行的,建议遵循“MPI进程数 × OMP线程数 ≤ 总CPU核心数”的原则,以获得最佳性能。
内容的提问来源于stack exchange,提问作者John Duffy
相关产品推荐
相关产品推荐

