【发布时间】:2017-08-02 06:10:18
【问题描述】:
下面是一个非常基本的 MPI 程序
#include <mpi.h>
#include <stdio.h>
int main(int argc, char * argv[]) {
int rank;
int size;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Barrier(MPI_COMM_WORLD);
printf("Hello from %d\n", rank);
MPI_Barrier(MPI_COMM_WORLD);
printf("Goodbye from %d\n", rank);
MPI_Barrier(MPI_COMM_WORLD);
printf("Hello 2 from %d\n", rank);
MPI_Barrier(MPI_COMM_WORLD);
printf("Goodbye 2 from %d\n", rank);
MPI_Finalize();
return 0;
}
您会期望输出是(对于 2 个进程)
Hello from 0
Hello from 1
Goodbye from 1
Goodbye from 0
Hello 2 from 1
Hello 2 from 0
Goodbye 2 from 0
Goodbye 2 from 1
或类似的东西(问候和再见应该分组,但不能保证流程顺序)。
这是我的实际输出:
Hello from 0
Goodbye from 0
Hello 2 from 0
Goodbye 2 from 0
Hello from 1
Goodbye from 1
Hello 2 from 1
Goodbye 2 from 1
我是否从根本上误解了 MPI_Barrier 应该做什么?据我所知,如果我只使用一次,那么它会给我预期的结果,但除此之外,它似乎完全没有任何作用。
我知道之前有人问过很多类似的问题,但是我查看的问题中的提问者误解了 MPI_Barrier 的功能。
【问题讨论】:
-
@Zulan,我认为你是对的。我已将我的问题标记为重复。