如何给每个进程分配一个编号范围?
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_rank
和 length=N/MPI_Comm_size
,以及一些适当的舍入等)
您可以进一步优化负载平衡,但您应该先让它工作。
最后你应该用总和调用 MPI_Reduce。
我正在做一个学习练习。我想计算从 0 到 N 范围内的素数数量。我可以使用 mpi 的什么函数来将数字范围分配给每个进程?换句话说,每个进程计算主要范围的一个数字范围内的素数。
您可以简单地在根上使用 for
循环和 MPI_Send(在接收者上使用 MPI_Recv)向每个进程发送它应该开始的编号和数量它应该检查的数字。
另一种甚至更好的可能性是使用 MPI_Bcast(在根和接收者上)将 N 发送到每个进程,并让每个进程使用自己的等级计算应该检查哪些数字。 (类似于 start=N/MPI_Comm_size*MPI_Comm_rank
和 length=N/MPI_Comm_size
,以及一些适当的舍入等)
您可以进一步优化负载平衡,但您应该先让它工作。
最后你应该用总和调用 MPI_Reduce。