MPI_Init的位置对串行码速度的影响

时间:2016-02-23 11:41:29

标签: mpi slurm

我在群集上有一个由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

0 个答案:

没有答案