我开始学习MPI了。我刚开始做一个简单的例子:我有一个矩形,它被分成两个子框。我假设每个盒子里有N/2个粒子(总共N个粒子)。我使用两个进程/核心来完成这项工作。第一芯处理第一子盒,第二芯处理第二子盒。在时间过程中,粒子会从一个子框交叉到另一个子框。我确信我必须使用MPI_Send和MPI_Recv来完成这项工作。但我不明白的是,如果每次都有多个粒子交叉(从一个核心到另一个核心),我如何有效地使用MPI_Send/Recv或MPI_Sandrecv?我忘了说我不知道每次穿越的粒子数。对不起,如果问题太简单/太傻。
有很多选项:
- 你可以做一些简单的事情,比如使用
MPI_ALLTOALL
来交换所有子框之间的粒子数量。然后使用点对点通信来通信实际粒子 - 你可以使用社区集体只使用
MPI_NEIGHBOR_ALLTOALL
与邻居交流 - 您可以使用所有邻居之间的点对点非阻塞通信来交换粒子的数量,然后交换粒子的内容
- 您可以使用
MPI_PROBE
来确定发送给您的粒子数(如果没有发送粒子,则会以某种方式传递此信息)
所以,是的,这是可能的。有很多选择。不过,您可能需要了解更多关于MPI的信息才能使用它们中的任何一个。