MPI 非阻塞发送/接收

问题描述 投票:0回答:2

我很好奇MPI中缺少这个功能:

MPI_Isendrecv( ... );

即非阻塞发送和接收,任何人都可以告诉我其省略背后的理由吗?

mpi nonblocking
2个回答
6
投票

我的看法是,

MPI_SENDRECV
的存在是为了方便想要使用阻塞语义但需要实现移位操作的程序员。如果您对非阻塞语义感到满意,则应该简单地使用现有的
MPI_ISEND
MPI_IRECV

有趣的是,MPI-3 将添加非阻塞集合(例如

MPI_IBARRIER
),但仍然没有
MPI_ISENDRECV
(请参阅 http://meetings.mpi-forum.org/draft_standard/mpi3.0_draft_2.pdf)。


0
投票

MPI-4 定义了以下函数,请参阅 MPI-4.1 pdf,第 77 页

int MPI_Isendrecv_replace(void *buf, int count, MPI_Datatype datatype,
    int dest, int sendtag, int source, int recvtag, MPI_Comm comm,
    MPI_Request *request);

注意,只有一个缓冲区用于发送和接收,因此严格来说它并不是

MPI_Sendrecv
的非阻塞变体。这个用作输入和输出的缓冲区是您无法使用
MPI_Isend
MPI_Irecv
自己实现的,所以这就是为什么包含在标准中是有意义的,它不仅仅是一个便利功能。有时该标准包括“基本原理”部分,但对于此功能却没有。

© www.soinside.com 2019 - 2024. All rights reserved.