gpt4 book ai didi

mpi - 可以在一个缓冲区上多次调用 MPI_Isend 吗?

转载 作者:行者123 更新时间:2023-12-04 14:29:34 25 4
gpt4 key购买 nike

关于 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);

最佳答案

我刚刚咨询了MPI 3.0 Standard并找到以下信息:

A nonblocking send call indicates that the system may start copying data out of the send buffer. The sender should not modify any part of the send buffer after a nonblocking send operation is called, until the send completes.



但是,我最近参加了一些标准开发人员提供的关于 MPI 3.0 的教程,有人提到,根据 MPI 实现(MPICH、LAM 等),访问其中使用的缓冲区可能不安全在发送完成之前,可以从 Isend 过程修改作为缓冲区的非阻塞通信调用。换句话说,可能无法保证第二个 MPI_Isend 中的缓冲区与第一个发送中的缓冲区相同。为了确定这一点,我会咨询您的实现源代码。

关于mpi - 可以在一个缓冲区上多次调用 MPI_Isend 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17074884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com