通过MPI_Send / recv发送和接收多个元素

时间:2014-10-28 12:20:13

标签: mpi

我开始学习MPI。我刚刚开始做一个简单的例子:我有一个矩形,它被分成两个子框。我可以说每个盒子里有N / 2个粒子(总共N个粒子)。我正在使用两个进程/核心来完成这项工作。第一个核心处理第一个子盒子,第二个核心处理第二个子盒子。在此期间,粒子从一个子盒交叉到另一个子盒。我确信我必须使用MPI_Send和MPI_Recv来完成这项工作。但我不明白的是,如果每次都有多个粒子交叉(从一个核心到另一个核心),我如何有效地使用MPI_Send / Recv或MPI_Sendrecv?我忘了说我不知道​​每次穿过的粒子数量。对不起如果问题太简单/太傻了。

1 个答案:

答案 0 :(得分:0)

有很多选择:

  • 你可以做一些简单的事情,比如使用MPI_ALLTOALL来交换所有子框中的粒子数量。然后使用点对点通信来传达实际粒子。
  • 您可以使用邻居集体仅使用MPI_NEIGHBOR_ALLTOALL
  • 与您的邻居通信
  • 您可以在所有邻居之间使用点对点非阻塞通信来交换粒子的数量和内容。
  • 您可以使用MPI_PROBE来确定发送给您的粒子数量(如果没有发送粒子,则会以某种方式表达想法。

所以,是的,它是可能的。有很多选择。您可能需要了解更多有关MPI才能使用它们的信息。