MPI_SEND可以使用我的输入数据数组作为缓冲区吗?

MPI_SEND可以使用我的输入数据数组作为缓冲区吗?,mpi,Mpi,正如我们所知,在发送操作期间使用了一种称为MPI发送缓冲区的东西。 以及以下代码: MPI_Isend(data, ..., req); ... MPI_Wait(req, &status) 在MPI\u Isend和MPI\u Wait之间使用data安全吗 这意味着,MPI\u Isend是否将数据用作内部发送缓冲区 此外,如果我不再使用数据,我是否可以指示MPI使用数据作为发送缓冲区,而不是浪费时间复制数据 顺便说一句,我听说过MPI\u Bsend,但我认为在这种情况下它不能节

正如我们所知,在发送操作期间使用了一种称为MPI发送缓冲区的东西。 以及以下代码:

MPI_Isend(data, ..., req);
...
MPI_Wait(req, &status)
MPI\u Isend
MPI\u Wait
之间使用
data
安全吗

这意味着,
MPI\u Isend
是否将
数据
用作内部发送缓冲区

此外,如果我不再使用
数据
,我是否可以指示MPI使用
数据
作为发送缓冲区,而不是浪费时间复制
数据


顺便说一句,我听说过
MPI\u Bsend
,但我认为在这种情况下它不能节省内存和时间。

MPI\u Isend
MPI\u Wait
之间使用
data
绝对不能节省时间。 在
MPI_Isend
MPI_Wait
之间,您实际上不知道何时可以重用
数据。只有在
MPI_Wait
之后,您才能确保发送了
数据,并且可以重用它。

如果你不再使用
数据
,你应该在程序结束时调用
MPI\u Wait

MPI\u Isend
MPI\u Wait
之间使用
数据
是绝对不能保存的。 在
MPI_Isend
MPI_Wait
之间,您实际上不知道何时可以重用
数据。只有在
MPI_Wait
之后,您才能确保发送了
数据,并且可以重用它。

如果不再使用
数据
,则应在程序结束时调用
MPI\u Wait

MPI提供两种操作:阻塞非阻塞。两者之间的区别在于何时可以安全地重用传递给MPI函数的数据缓冲区

阻塞调用(如
MPI\u Send
)返回时,MPI库不再需要缓冲区,可以安全地重新使用缓冲区。另一方面,非阻塞调用只会启动相应的操作,并让它异步继续。只有在成功调用例程(如
MPI_Wait
MPI_test
的阳性测试结果)后,才能安全地重新使用缓冲区


至于库如何使用用户缓冲区,这是非常具体的实现。出于性能原因,较短的消息通常会复制到内部(对于MPI库)缓冲区。较长的消息通常直接从用户缓冲区读取并发送到网络,因此MPI将一直使用缓冲区,直到发送完整个消息。

MPI提供两种操作:阻塞非阻塞。两者之间的区别在于何时可以安全地重用传递给MPI函数的数据缓冲区

阻塞调用(如
MPI\u Send
)返回时,MPI库不再需要缓冲区,可以安全地重新使用缓冲区。另一方面,非阻塞调用只会启动相应的操作,并让它异步继续。只有在成功调用例程(如
MPI_Wait
MPI_test
的阳性测试结果)后,才能安全地重新使用缓冲区


至于库如何使用用户缓冲区,这是非常具体的实现。出于性能原因,较短的消息通常会复制到内部(对于MPI库)缓冲区。较长的消息通常直接从用户缓冲区读取并发送到网络,因此MPI将一直使用缓冲区,直到整个消息发送完毕。

如果您将调用
MPI\u的时间推迟到程序的最后,发送操作可能也要到程序的最后一刻才能实际进行。如果您将调用
MPI_Wait
延迟到程序的最后一刻,发送操作也可能要到程序的最后一刻才能实际进行。谢谢您的回复,我很欣慰看到图书馆足够聪明。谢谢你的回答,我很欣慰看到图书馆足够聪明。