调用MPI_Init()后内存会发生什么变化?

时间:2012-07-27 16:26:43

标签: memory mpi

假设我有一些看起来像这样的代码:

#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;
}

每个MPI实例都会获得自己的my_array副本吗?只排名0?他们都没有?在MPI_Init之前有任何代码是不好的做法吗?

2 个答案:

答案 0 :(得分:7)

“我打电话给MPI_Init时记忆会发生什么”的简短回答是:什么都没有。

MPI_Init在调用进程中初始化MPI库。没有更多,没有更少。在MPI_Init调用时,所有MPI进程已经存在,他们只是彼此不了解而无法进行通信。

每个MPI流程都是一个单独执行的程序。这些进程不共享内存,并通过传递消息进行通信。

确实,调用MPI_Init的进程甚至可以完全是不同的程序,只要它们传递的消息匹配即可。这是MPMD模型。

答案 1 :(得分:2)

当你运行mpi代码时,你在不同的进程中运行相同的代码(它们不能共享内存),所以每个进程都有自己的数组。

数组应该相等,除非你的数据依赖于时间(进程不一定是同步的),进程级别(我认为级别仅在init调用之后可用)或任何随机数生成器(有些可能生成随机种子)同样)。