如何给每个进程分配一个编号范围?

How to distribute a number range to each process?

我正在做一个学习练习。我想计算从 0 到 N 范围内的素数数量。我可以使用 mpi 的什么函数来将数字范围分配给每个进程?换句话说,每个进程计算主要范围的一个数字范围内的素数。

您可以简单地在根上使用 for 循环和 MPI_Send(在接收者上使用 MPI_Recv)向每个进程发送它应该开始的编号和数量它应该检查的数字。

另一种甚至更好的可能性是使用 MPI_Bcast(在根和接收者上)将 N 发送到每个进程,并让每个进程使用自己的等级计算应该检查哪些数字。 (类似于 start=N/MPI_Comm_size*MPI_Comm_ranklength=N/MPI_Comm_size,以及一些适当的舍入等)

您可以进一步优化负载平衡,但您应该先让它工作。

最后你应该用总和调用 MPI_Reduce。