MPI远程访问内存

时间:2016-03-27 15:39:33

标签: mpi shared-memory mpi-rma

关于MPI 3.0中的远程访问内存,有两个通信调用:MPI_Put和MPI_Get。我使用以下内容将本地数据放入共享内存(例如,我复制了https://software.intel.com/en-us/blogs/2014/08/06/one-sided-communication中的一些语句):

 if (id < num_procs-1)
      MPI_Put(&localbuffer[0], NUM_ELEMENT, MPI_INT, id+1, 0, NUM_ELEMENT, MPI_INT, win);
   else
      MPI_Put(&localbuffer[0], NUM_ELEMENT, MPI_INT, 0, 0, NUM_ELEMENT, MPI_INT, win);

这里num_procs是处理器的数量,id是处理器等级。它们分别从以下地址返回:

   MPI_Comm_rank(MPI_COMM_WORLD, &id);
   MPI_Comm_size(MPI_COMM_WORLD, &num_procs);

在MPI_Put之后,每个处理器的数据应该放在共享内存中。然后我的代码想使用

从这个共享内存中获取数据
if (id != 0)
      MPI_Get(&localbuffer[0], NUM_ELEMENT_get, MPI_INT, id-1, 0, NUM_ELEMENT, MPI_INT, win);
   else
      MPI_Get(&localbuffer[0], NUM_ELEMENT_get, MPI_INT, num_procs-1, 0, NUM_ELEMENT, MPI_INT, win);

我的问题是:我是否可以运行NUM_ELEMENT_get与NUM_ELEMENT不同的案例?这意味着相同的处理器将从共享内存中获取与其发送的数据不同的数据。对此另一个问题是单个处理器获得的数据可以从不同的处理器发送。那么如何在上面的MPI_Get调用中指定id-1和num_procs-1的参数呢?我没有尝试实现这个,但我正在考虑在我的代码中设计MPI实现。

非常感谢你。

0 个答案:

没有答案