如何向多个进程(但不是所有进程)广播或发送单个值

How to broadcast or send a single value to multiple processes (but not all of them)?

本文关键字:进程 广播 单个值      更新时间:2023-10-16

我要做的是将一个值(我的pivot)广播到我的超立方体通信器的子域。因此,例如进程0向进程1,2&当过程4发送到4,5&6.它是否要求我提前创建沟通器,或者是否有方法向选定的流程进行广播/发送?

int broadcaster = 0;    
if(isBroadcaster)
{
    cout << "rank " << mpiRank << " currentd:" << currentd << " selecting pivot: " << pivot << endl;
    pivot = currentValues[0];
    broadcaster = mpiRank;
}
//TODO: Broadcast to processes 0 to 4 only.
//here, MPI_COMM_HYPERCUBE contains process 0 to 8
MPI_Bcast(&pivot, 1, MPI_INT, broadcaster, MPI_COMM_HYPERCUBE);

最好的解决方案可能是使用MPI_COMM_SPLIT将流程分解为子通信程序。描述通信域的方式。

MPI_GROUP对象用于描述组,但在大多数情况下不能用于执行通信。

另一种选择是使用MPI_ALLTOALLV。不过,这真是太恶心了,而且太夸张了。

您可以使用mpi_comm_split,但如果组成员经常更改,则必须重复此操作。

另一个解决方案(在我看来是肮脏但有效的)是在发出计算命令之前广播类似进程掩码的东西。因此,进程0将广播一个由8个类似布尔值组成的数组,其中true仅针对mask1、mask[2]、mask[3]设置。。。