Parallel processing 理解MPI发送差异

Parallel processing 理解MPI发送差异,parallel-processing,mpi,Parallel Processing,Mpi,好的,让我们开始吧,我脑子里有点困惑 发送:正在阻止。发送方将等待,直到接收方发布相应的RECV SSEND:它正在阻塞,发送方不仅会等待接收方发送相应的RECV,还会等待RECV的确认。这意味着RECV运行良好 BSEND:它是非阻塞的。进程可以继续执行其部分代码。数据存储在之前正确分配的缓冲区中 ISEND:它是非阻塞的。进程可以继续执行其部分代码。数据未存储在缓冲区中:在确定ISEND运行正常(等待/测试)之前,不得覆盖正在发送的数据 所以。。ISEND和BSEND是否仅针对缓冲区不同?是

好的,让我们开始吧,我脑子里有点困惑

发送:正在阻止。发送方将等待,直到接收方发布相应的RECV

SSEND:它正在阻塞,发送方不仅会等待接收方发送相应的RECV,还会等待RECV的确认。这意味着RECV运行良好

BSEND:它是非阻塞的。进程可以继续执行其部分代码。数据存储在之前正确分配的缓冲区中

ISEND:它是非阻塞的。进程可以继续执行其部分代码。数据未存储在缓冲区中:在确定ISEND运行正常(等待/测试)之前,不得覆盖正在发送的数据

所以。。ISEND和BSEND是否仅针对缓冲区不同?

是--ISENDBSEND之间的差异就是缓冲区

ISEND是就地执行的非阻塞发送

BSEND是一种非阻塞发送,可以在
MPI\u Buffer\u Attach
指定的内存段中进行缓冲

创建BSEND函数是为了允许程序员精确指定数据缓冲的位置


需要注意的是,与使用ISEND类似,您还必须使用BSEND缓冲区检查所有发送的状态,以避免缓冲区溢出或覆盖挂起的BSEND

我只使用send和isend,而你的这两个都是正确的。isend还有一点需要补充:在确定irecv已完成等待/测试之前,您不得访问正在接收的数据。共有六次发送。常规、同步和缓冲,每个都有阻塞和非阻塞。同步发送对于调试和实现点到点屏障非常有用。不应使用缓冲发送。它公开了一个更好地隐藏的植入概念。这里解释了不同的MPI发送模式:。MPI中有四种不同的阻塞发送类型,每种类型都有对应的非阻塞变量,总共有8个MPI调用。请注意,阻塞并不意味着同步。@HristoIliev谢谢。我忘记了ready send,这也是一个毫无意义的实现细节的暴露。我相信
BSEND
在数据被缓冲(即,如果它被缓冲)之前是阻塞的
IBSEND
是非阻塞@FrancescoN。