我要做的是将一个值(我的枢轴)广播到我的超级立方体通信器的子域。例如,流程0发送到进程1、2和3,而进程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);发布于 2014-11-01 20:09:31
最好的解决方案可能是使用MPI_COMM_SPLIT将您的流程分解为子通信程序。这就是描述通信领域的方法。
MPI_GROUP对象用于描述组,但大部分不能用于执行通信。
另一种选择是使用MPI_ALLTOALLV。不过,这是相当恶心的,还有很多过火的事情。
发布于 2014-11-01 20:48:43
您可以使用mpi,但如果组成员更改太频繁,则必须重复此操作。
另一个解决方案(我认为是肮脏但有效的)是在发出计算命令之前广播类似于进程掩码的内容。因此进程0将广播一个8 bool样值的数组,并仅为掩码1、mask2、mask3设置true。
https://stackoverflow.com/questions/26691120
复制相似问题