需要澄清我对发送类型中给出的isend和issend的理解
我的理解是,一旦发送缓冲区空闲,即所有数据都被释放后,isend将返回.另一方面,Issend仅在收到获取/未获取整个数据的确认时才返回.这就是全部吗?
Sig*_*ndo 20
双方MPI_Isend()并MPI_Issend()立即返回,但在这两种情况下,你不能马上使用的发送缓冲区.
认为有之间的差异MPI_Send()和MPI_Ssend():
MPI_Send() 如果缓冲区太大而无法在本地缓冲,则可以缓冲或者它可以是同步的,并且在这种情况下,它等待完成将数据发送到相应的接收操作.
MPI_Ssend() 始终是同步的:它总是等待完成将数据发送到相应的接收操作.
相应的"I" -operations的内部工作非常相似,除了一个事实,即他们都不会阻塞(立即返回):区别只是当了MPI库的信号,您可以使用发送用户程序-buffer(即:MPI_Wait()返回或MPI_Test()返回true- 非阻塞发送的所谓发送完成操作):
有MPI_Isend()可能发生这种情况既可以当数据已经由MPI库拥有的缓冲本地复制,如果下面的"同步门槛",或者当数据被实际移动到同级任务:发送完成操作可以是本地的,如果底层发送操作被缓冲.
使用MPI_Issend()MPI不会在本地缓冲数据,只有在数据实际传输完成后才会返回"无缓冲条件"(并且可能在低级别执行):发送完成操作是非本地的.
该MPI标准文件是在这些方面很迂腐.请参见3.7非阻塞通信一节.