我在群集上有一个由SLURM管理的代码。代码由串行和并行功能组成。串行函数在main之后调用,然后是并行函数。我意识到,当我在开始时初始化MPI时,正好在main之后,代码对于串行函数来说非常慢。但是在并行功能之前初始化MPI并且仅在连续完成之后才使代码以正常速度运行。我尝试了几种SLURM选项,但它们并没有改变结果。我认为如果有5个节点和5个任务,那么串行功能的速度应该或多或少相同。我想知道为什么会这样。
int main(int argc, char** argv)
{
MPI_Init (&argc, &argv);
int rank, n_procs;
MPI_Comm world = MPI_COMM_WORLD;
MPI_Comm_rank (world, &rank);
MPI_Comm_size (world, &n_procs);
// serial functions
// parallel functions
}
脚本1:
#!/bin/bash
#SBATCH -M truba
#SBATCH -p mid1
#SBATCH -A a
#SBATCH -J a-test
#SBATCH -N 5
#SBATCH -t 3:00:0
#SBATCH --output=slurm-%j.out
#SBATCH --error=slurm-%j.err
module load centos6.4/lib/openmpi/1.8.8-gcc-5.1.0
mpirun ./out
exit
脚本2:
#!/bin/bash
#SBATCH -M truba
#SBATCH -p mid1
#SBATCH -A a
#SBATCH -J a-test
#SBATCH -N 5
#SBATCH -n 5
#SBATCH -c 16
#SBATCH -t 3:00:0
#SBATCH --output=slurm-%j.out
#SBATCH --error=slurm-%j.err
module load centos6.4/lib/openmpi/1.8.8-gcc-5.1.0
mpirun ./out
exit