首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向多个进程(但不是所有进程)广播或发送单个值?

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

Stack Overflow用户
提问于 2014-11-01 16:06:21
回答 2查看 354关注 0票数 1

我要做的是将一个值(我的枢轴)广播到我的超级立方体通信器的子域。例如,流程0发送到进程1、2和3,而进程4发送到4、5和6。它是否要求我在手动之前创建通信器,还是有一种方法可以对选定的进程进行广播/发送?

代码语言:javascript
复制
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);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-01 20:09:31

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

MPI_GROUP对象用于描述组,但大部分不能用于执行通信。

另一种选择是使用MPI_ALLTOALLV。不过,这是相当恶心的,还有很多过火的事情。

票数 1
EN

Stack Overflow用户

发布于 2014-11-01 20:48:43

您可以使用mpi,但如果组成员更改太频繁,则必须重复此操作。

另一个解决方案(我认为是肮脏但有效的)是在发出计算命令之前广播类似于进程掩码的内容。因此进程0将广播一个8 bool样值的数组,并仅为掩码1、mask2、mask3设置true。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26691120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档