Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Petsc代码在2990WX平台上没有并行加速_C_Mpi_Amd Processor_Petsc - Fatal编程技术网

Petsc代码在2990WX平台上没有并行加速

Petsc代码在2990WX平台上没有并行加速,c,mpi,amd-processor,petsc,C,Mpi,Amd Processor,Petsc,当我在旧的Intel Xeon平台上运行代码时(X5650@2.67GHz)在两倍处理器使用率的情况下,80%~95%的速度提高,并行效率似乎很好。然而,当我在AMD2990WX平台上运行相同的代码时,我无法获得任何线程数的加速 我很困惑,为什么我的新AMD平台执行如此糟糕的并行效率,我几乎不知道我的代码中哪里有错误的设置 我有一个基于PetSc库的C代码来解决一个非常大的稀疏线性方程,我代码中的并行部分由PetSc提供,它自动涉及MPI(我只将矩阵构造任务安排到每个进程,不添加任何其他通信例程

当我在旧的Intel Xeon平台上运行代码时(X5650@2.67GHz)在两倍处理器使用率的情况下,80%~95%的速度提高,并行效率似乎很好。然而,当我在AMD2990WX平台上运行相同的代码时,我无法获得任何线程数的加速

我很困惑,为什么我的新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-n32./${bin_DIR}/main
对于64个进程:

/usr/lib64/mpich/bin/mpiexec-n64./${bin_DIR}/main
在XEON平台上:

/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

64可能太大了。试试48。X5650系统有多少内核?我试了16、24、32、48、64甚至128个(虽然2990WX只有64个线程),代码可以在所有设置下运行,但速度几乎没有变化。每个节点2个X5650 cpu,总共8个节点。每个X5650有2个内核和4个线程。这会稍微好一点。旧系统在每个节点的内存性能方面具有相当大的优势,即使内存运行较慢。我相信旧系统总共有24个DDR3通道,而新系统有4个更快的DDR4通道。