限制群集上的广播数量?

时间:2018-05-04 15:53:24

标签: c mpi cluster-computing openmpi slurm

我有一个包含mpi广播线路的问题。在第1000次迭代之后,广播线停止或挂起执行(大概等待传输)。

请参阅以下代码:

#include <stdio.h>
#include <string.h>
#include "mpi.h"

int main(int argc, char* argv[]){
    int  aa = 0, size = 10000;
    int  my_rank; /* rank of process */
    int  smessage = 9, rmessage = 9;        /* storage for message */

    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);

    if(my_rank !=0) {
        for(aa=1;aa<size;aa++) {
            MPI_Bcast(&rmessage, 1, MPI_INT, 0, MPI_COMM_WORLD);
            printf("rec message(i=%d)=%d\n", aa, rmessage);
        }
    }
    else {
        for(aa=1;aa<size;aa++) {
            smessage=aa;
            printf("send message(i=%d)=%d\n", aa, smessage);
            MPI_Bcast(&smessage, 1, MPI_INT, 0, MPI_COMM_WORLD);
        }
    }
    MPI_Finalize();
    return 0;
}

当我用

运行它时
mpicc -openmp -fopenmp example_code.c -o example_prog
mpirun -n 3 example_prog

我得到了预期的输出(最多可以重新排列)

sent message(i=1)=1
rec message(i=1)=1
rec message(i=1)=1
...
sent message(i=9999)=9999
rec message(i=9999)=9999
rec message(i=9999)=9999

但是,当我使用SLURM的sbatch和包含

的脚本将其发送到我的大学集群时
mpirun -n 3 --loadbalance --cpus-per-proc 24 ./example_prog

(我正在使用OpenMPI 1.6.5)我得到的程序要么在循环中间挂起,要么被作业处理程序自动终止。输出是

sent message(i=1)=1
rec message(i=1)=1
rec message(i=1)=1
...

rec message(i=9999)=999
rec message(i=9999)=999
sent message(i=9999)=1000

它明显停在循环的“中间”。您是否对导致此错误的原因或如何避免此错误有任何想法?

非常感谢你!

0 个答案:

没有答案