在MPI进程之间更新数组
Update array between MPI processes
我有两个进程p0和p1。其中一个进程对数组执行某些操作(我不知道是哪个进程)。稍后,另一个进程需要做一些事情(在更新数组上)。示例:
- p1对数组执行填充操作
- p1"发送"数组
- 警察需要处理array->"读取"更新数组
- p1需要处理数组->"读取"更新数组
。。。等等看起来我必须使用MPIBSEND,但我看到还有MPISENDRECV。如果使用MPIBSEND,这个过程如何知道缓冲区中是否有什么东西?
感谢
所以,你说的是,你有一个存在于P1上的数组A。在第一步中计算出这一点之后,P0和P1都需要与第一步中所计算的阵列独立工作。
事实上,这还远远不够。
- 如果第一步中A的计算量很小(小于通信量),或者如果P0在P1计算A时不忙,则可以独立计算A和两个处理器
- 第二步中的计算需要足够大,以便将数据发送到另一个处理器
- 如果P0和P1上的两个计算大小大致相同,则可以使用MPI_Send(阻塞),因为我希望稍后会有另一个同步点
- 我更喜欢手动复制阵列(只复制真正需要的部分),并对MPI_Bsend使用异步MPI调用(Isend/Irecv),这是不鼓励的
- 如果有充分的理由,你应该只使用Bsend、Ssend和其他变体。这在很大程度上取决于实现和网络,哪种调用最好。您应该只决定是否可以使用异步MPI。只有在绝对必要的情况下才考虑其他MPI调用
但是使用MPI_Sandrecv解决这个问题有什么意义?当p0向p1发送一些东西并且在同一点p1向p0发送一些东西时,这是有用的。但这不是您所描述的,所以这肯定是错误的函数,这就是为什么我建议您从MPI_Send开始。
相关文章:
- 从C++本机插件更新Vector3数组
- OpenMP:并行更新数组总是需要减少数组吗
- 如何在 c# 代码中通过引用调用时从 c++ dll 更新数组值?
- 我可以更新数组中的对象吗?
- 为什么数组变量正在更新
- 为什么我的数组值会更新为随机值?
- 如何更新传递到函数中的数组
- C++访问冲突读取位置0xDDDDDDCD当我尝试删除已更新的数组时
- C++:地下城爬行者 - 更新数组时出现问题
- 在某些范围更新后获取整数数组的最终状态的有效算法是什么?
- 用于在数组中找到零并切换标志 更新另一个数组的循环的SSE优化
- 尝试使用Huffman String代码更新数组
- 在MPI进程之间更新数组
- 对一个具有重复元素的数组进行排序时更新并行数组
- 关于使用glBufferSubData频繁更新实例化数组的困惑
- 对象数组的条目未更新
- 为什么在更新数组时不能指定构造函数
- 不更新数组的继承机器人竞赛
- 如何使用rapidjson更新数组
- 如何在编译时或代码初始化时自动更新数组中的项