作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在编写一个程序来使用 MPI
库检查最短路径。有两种情况:
要么我找到了更好的路径,以防缓冲区的第一个槽将声明 resultBuff[0] = 1
并且我将需要遍历缓冲区的其余内容以获得更好的路径。
另一种情况是 resultBuff[0] = 0
,我不会排除缓冲区其他单元格中的任何值。
我可以使用单独的 MPI_Isend
调用吗:
如果我找到更好的路径并将其存储在 resultBuff[1]
到 resultBuff[10]
中:
MPI_Isend((void*)sendBuff, 11, MPI_INT, 0, 1, MPI_COMM_WORLD, &request);
如果找不到更好的路径:
MPI_Isend((void*)sendBuff, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &request);
在这两种情况下我都会使用
MPI_Recv( (void*)resultBuff, 11, MPI_INT, MPI_ANY_SOURCE, 1, MPI_COMM_WORLD, &status);
接收结果。
这行得通吗?
如果是这样,如果不发送更好的路径,我会节省通信成本吗?
注意:resultBuff
的大小为 11。
最佳答案
是的,你可以做到这一点。来自 MPI 标准和 man pages对于 MPI_Recv,“计数参数表示消息的最大长度;实际数量可以用 MPI_Get_count 确定”,您使用从 MPI_Recv() 返回的 status
对象调用它。
至于节省通信成本,它可能不会——这种短消息主要受发送消息的延迟而不是带宽的影响。
关于c - MPI_Recv : Receiving a different size than the one Sent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4803961/
我是一名优秀的程序员,十分优秀!