【发布时间】:2014-01-05 03:32:29
【问题描述】:
当我运行“Open MPI”程序时,它通常按我想知道的随机顺序分配排名 有没有办法总是按顺序分配等级?
所以不是这个
Hello, World. I am 2 of 3
Hello, World. I am 0 of 3
Hello, World. I am 1 of 3
我可以得到这个
Hello, World. I am 0 of 3
Hello, World. I am 1 of 3
Hello, World. I am 2 of 3
编辑
这里是代码
PROGRAM hello
INCLUDE 'mpif.h'
INTEGER*4 :: numprocs, rank, ierr
CALL MPI_INIT(ierr)
CALL MPI_COMM_SIZE(MPI_COMM_WORLD, numprocs, ierr)
CALL MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)
write(*,*) 'Hello World. I am', rank, 'of', numprocs
CALL MPI_FINALIZE(ierr)
END PROGRAM hello
我在 i5 处理器(4 线程)上运行时测试过
mpirun -np 4 myprog
它按我的意愿工作,按 0-3 的顺序打印,否则(如上图所示的 3)它不会这样做(测试了 100 次)
【问题讨论】:
-
rank 到主机/核心的映射在每个 MPI 实现中都是确定性的。在工作过程中,每个级别的确切进度(很大程度上)是独立的。打印的“无序”性质说明每个进程都进行了写入,并且该写入通过 stdout 传输回 mpirun 命令以以不同的顺序输出到终端。这是 MPI 程序的基本性质。队伍之间充其量只是“松散”的协调。跨所有行列的同步是并行编程的基本问题之一。
-
@StanGraves 非常感谢