当我在旧的 Intel Xeon 平台(X5650@2.67GHz)上运行我的代码时,并行效率似乎不错,80%~95% 的速度提高了两倍的处理器使用率。但是,当我在 AMD 2990WX 平台上运行相同的代码时,我无法通过任何数量的线程获得任何加速。
我很困惑,为什么我的新 AMD 平台的并行效率如此糟糕,我几乎不知道我的代码中的错误设置在哪里。
我有一个基于 PetSc 库的 C 代码来求解一个非常大的稀疏线性方程,我代码中的并行部分由 PetSc 提供,它自动涉及 MPI(我只是将矩阵构建任务安排到每个进程中,不添加任何其他通信程序)。
计算平台系统均为Centos7,MPI库版本均为MPICH3,PetSc版本均为3.11。XEON 平台上的 BLAS 包含在 MKL 中,而 AMD 平台上的 BLAS 包含在 BLIS 库中。
当程序在AMD平台上运行时,我用它top
来检查处理器的运行情况,发现CPU使用率实际上随着运行设置的不同而不同:
对于 32 个进程:
/usr/lib64/mpich/bin/mpiexec -n 32 ./${BIN_DIR}/main
对于 64 个进程:
/usr/lib64/mpich/bin/mpiexec -n 64 ./${BIN_DIR}/main
至强平台:
/public/software/Petsc/bin/petscmpiexec -n 64 -f mac8 ./${BIN_DIR}/main
带mac8
文件:
ic1:8
ic2:8
ic3:8
ic4:8
ic5:8
ic6:8
ic7:8
ic8:8