Een*_*oku 6 c mpi communicator
我发现了一个名为MPI_COMM_SELF的MPI通信器.问题是,我不知道,什么时候有用.在我看来,只有每个过程都"认为"自己是根.
你能解释一下我究竟是如何MPI_COMM_SELF工作的,以及它在哪些情况下有用?
我发现了这个幻灯片,但是那里只是简单地提到了传播者.
我已经尝试过这个"Hello,world"示例,并且所有进程都返回0作为它们的PID.
#include <mpi.h>
#include <stdio.h>
int main() {
MPI_Init(NULL, NULL);
int world_rank;
MPI_Comm_rank(MPI_COMM_SELF, &world_rank);
printf("Hello, my PID is %d!\n",
world_rank);
MPI_Finalize();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
MPI 通信器由两条信息组成:进程的集合以及该集合的上下文。默认通信器是 MPI_COMM_WORLD(每个进程)和 MPI_COMM_SELF(仅一个进程)。
您可以为所有、一个或某些进程创建更多通信器。
为什么上下文很重要?想想图书馆。使用 MPI 的库可能会与该库的客户端发生冲突,除非库会复制通信器,从而创建一个库可以在其中进行通信的上下文,而无需担心客户端正在做什么。
MPI_COMM_SELF 是单个进程。如果调用集体例程,则通信器中的所有进程都必须参与。
MPI_COMM_SELF 对于 MPI-IO 例程特别有用,但前提是您想要“每个进程文件”。如果您与多个 MPI 进程共享文件(您可能应该这样做),请使用包含这些 MPI 进程的通信器。