Parallel processing 程序在1个节点上扩展性很强,使用2个节点时运行时间大幅增加

Parallel processing 程序在1个节点上扩展性很强,使用2个节点时运行时间大幅增加,parallel-processing,mpi,scaling,openmpi,sbatch,Parallel Processing,Mpi,Scaling,Openmpi,Sbatch,结果表明,当我将处理器数量从2个增加到4个,再增加到10个时,运行时间每次都会减少,但当我增加到20个处理器时,运行时间会大幅增加。每个节点都有两个8核处理器,因此我想将每个节点限制为16个mpi进程。我这样做对吗?我想问题可能与我的sbatch文件有关。特别是当我从使用一个节点变成使用两个节点时,运行时间大幅增加。这是我的sbatch文件: #!/bin/bash -x #SBATCH -J scalingstudy #SBATCH --output=scalingstudy.%j.out #

结果表明,当我将处理器数量从2个增加到4个,再增加到10个时,运行时间每次都会减少,但当我增加到20个处理器时,运行时间会大幅增加。每个节点都有两个8核处理器,因此我想将每个节点限制为16个mpi进程。我这样做对吗?我想问题可能与我的sbatch文件有关。特别是当我从使用一个节点变成使用两个节点时,运行时间大幅增加。这是我的sbatch文件:

#!/bin/bash -x
#SBATCH -J scalingstudy
#SBATCH --output=scalingstudy.%j.out
#SBATCH --error=scaling-err.%j.err
#SBATCH --time=03:00:00
#SBATCH --partition=partition_name
#SBATCH --mail-type=end
#SBATCH --mail-user=email@school.edu

#SBATCH -N 2
#SBATCH --ntasks-per-node=16

module load gcc/4.9.1_1
module load openmpi/1.8.1_1

mpic++ enhanced_version.cpp

mpirun -np 2 ./a.out 10000
mpirun -np 4 ./a.out 10000
mpirun -np 10 ./a.out 10000
mpirun -np 20 --bind-to core ./a.out 10000

mpirun -np 2 ./a.out 50000
mpirun -np 4 ./a.out 50000
mpirun -np 10 ./a.out 50000
mpirun -np 20 --bind-to core ./a.out 50000

mpirun -np 2 ./a.out 100000
mpirun -np 4 ./a.out 100000
mpirun -np 10 ./a.out 100000
mpirun -np 20 --bind-to core ./a.out 100000

mpirun -np 2 ./a.out 500000
mpirun -np 4 ./a.out 500000
mpirun -np 10 ./a.out 500000
mpirun -np 20 --bind-to core ./a.out 500000

mpirun -np 2 ./a.out 1000000
mpirun -np 4 ./a.out 1000000
mpirun -np 10 ./a.out 1000000
mpirun -np 20 --bind-to core ./a.out 1000000

您是否尝试了
-ppn
标志?这提供了一种方法来指定每个节点上的列组数量。您的问题可能是在一个节点上放置了8个列组,在另一个节点上放置了两个列组(取决于默认的映射程序)。@WesleyBland,
#SBATCH--ntasks per node=16
是SLURM的等价物,对吗,因此,在使用MPI时,学习MPI可能希望使该数字更小。我怀疑,在当前状态下,是否有人能够回答您的问题。这可能是由于不正确的计时方法,或由于编写的算法不正确,或由于对延迟的高度敏感。。。
a.out
做什么?“运行时间大幅增加”构成了什么?为什么在有20个进程的情况下只使用
--bind to core
,而在其他进程中不使用(尽管Open MPI 1.8.x默认绑定到core)?我和我的研究顾问谈过,他认为使用多个节点时通信开销的增加是由于消息必须通过连接节点的互连网络,而不是仅将消息复制到单个节点的共享内存中@赫里斯托·利耶夫,我想绑定到核心是多余的,因为每个节点已经有了NTASK?我只是想确保,因为我要完成16项任务,所以每个核心上只有一项任务。