【发布时间】:2013-06-09 02:51:56
【问题描述】:
关于 MPI_Isend,MPI 标准说“非阻塞发送调用表明系统可以开始从发送缓冲区复制数据。在调用非阻塞发送操作后,发送方不应访问发送缓冲区的任何部分,直到发送完成。” (http://www.mpi-forum.org/docs/mpi-11-html/node46.html)
在另一个发送调用中引用发送缓冲区是否正常,或者是否包含在“访问发送缓冲区的任何部分”中?
换句话说,发送方的以下 C 代码是否正确?
MPI_Request req[2];
MPI_Status statuses[2];
...
MPI_Isend(buf, type, count, dest0, tag, comm, &req[0]);
MPI_Isend(buf, type, count, dest1, tag, comm, &req[1]);
MPI_Waitall(2, req, statuses);
【问题讨论】:
-
我在这里猜测,这就是为什么这不是一个完整的答案,你真正不想做的是修改源缓冲区的内容或读取发送完成之前的目标缓冲区。所以对我来说,你在做什么看起来不错。但请测试。不要相信我的话。
-
@bob.sacamento 当然,这是真的。而且我知道我的代码对于我正在使用的 MPI 实现是正确的(查看源代码),但我想知道根据标准这是否正确,即适用于 MPI 的每个正确实现。
标签: mpi message-passing