如何向多个进程(但不是所有进程)广播或发送单个值
How to broadcast or send a single value to multiple processes (but not all of them)?
我要做的是将一个值(我的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]设置。。。
相关文章:
- boost::进程间消息队列引发错误
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 是否可以通过C++扩展强制多个python进程共享同一内存
- IPC使用多个管道和分支进程来运行Python程序
- 异常属于C++中的线程还是进程
- WMI检测进程创建事件-c++
- c++多进程编写一个唯一的文件
- 如何在C++中将函数发送到另一个进程
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 其中降频广播实际上是有用的
- boost::asio UDP 广播客户端仅接收"fast"数据包
- 终止 QProcess 不会终止子进程
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- Windows 进程间同步类似事件?
- MPI在某个进程找到解决方案时使用广播结束程序
- 广播消息供所有进程退出 (MPI)
- 如何使用广播将二维数组传递给所有进程
- 用广播系统消息杀死旧进程
- 如何向多个进程(但不是所有进程)广播或发送单个值