我开始学习MPI。我刚刚开始做一个简单的例子:我有一个矩形,它被分成两个子框。我可以说每个盒子里有N / 2个粒子(总共N个粒子)。我正在使用两个进程/核心来完成这项工作。第一个核心处理第一个子盒子,第二个核心处理第二个子盒子。在此期间,粒子从一个子盒交叉到另一个子盒。我确信我必须使用MPI_Send和MPI_Recv来完成这项工作。但我不明白的是,如果每次都有多个粒子交叉(从一个核心到另一个核心),我如何有效地使用MPI_Send / Recv或MPI_Sendrecv?我忘了说我不知道每次穿过的粒子数量。对不起如果问题太简单/太傻了。
答案 0 :(得分:0)
有很多选择:
MPI_ALLTOALL
来交换所有子框中的粒子数量。然后使用点对点通信来传达实际粒子。MPI_NEIGHBOR_ALLTOALL
MPI_PROBE
来确定发送给您的粒子数量(如果没有发送粒子,则会以某种方式表达想法。所以,是的,它是可能的。有很多选择。您可能需要了解更多有关MPI才能使用它们的信息。