假设我有一些看起来像这样的代码:
#include "mpi.h"
int main( int argc, char** argv )
{
int my_array[10];
//fill the array with some data
MPI_Init(&argc, &argv);
// Some code here
MPI_Finalize();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
每个MPI实例都会获得自己的my_array副本吗?只排名0?他们都没有?之前有任何代码是不好的做法MPI_Init吗?
对"当我打电话时记忆会发生什么"的简短回答MPI_Init是:什么都没有.
MPI_Init在调用进程中初始化MPI库.没有更多,没有更少.在MPI_Init通话时,所有MPI进程已经存在,他们只是彼此不了解并且无法通信.
每个MPI过程都是一个单独执行的程序.进程不共享内存,并通过传递消息进行通信.
实际上,MPI_Init只要他们传递的消息匹配,调用进程甚至可以完全是不同的程序.这是MPMD模型.