分类:
2006-03-09 18:21:49
划分依据:
(1)发送的数据是否缓存
(2)是否在接收调用执行后才能执行发送操作
(3)什么时候发送调用正确返回
(4)发送调用正确返回是否等于发送已经完成(发送缓冲区是否可以被覆盖)
(5)发送数据是否到达接收缓冲区
分为四种:标准通信模式、缓存通信模式、同步通信模式、就绪通信模式
标准通信模式:
是否缓存数据由MPI决定
如果缓存数据,发送操作的进行与接收操作是否执行无关。数据缓存完毕时发送操作就会正确返回。
如果不缓存数据,只有当相应的接收调用执行,并且发送数据完全到达接收缓冲区后,发送操作才算完成。这时,发送缓冲区可以被覆盖。对于非阻塞通信,发送操作虽然没有完成,但发送调用已经正确返回。
缓存通信模式:程序员直接对通信缓冲区进行控制。
用户必须保证发送前必须有缓冲区可用,否则失败返回。阻塞发送后,缓冲区可覆盖,但非阻塞发送正确返回后,缓冲区不能立刻被覆盖。这种通信模式下发送调用是否正确返回只和有无缓冲区有关。另外,请注意区别MPI的发送/接收缓冲区与系统缓冲区。
同步通信模式
这种通信的开始不依赖于相应的接收操作是否起动,但是同步发送必须等相应的接收进程开始后才可正确返回。这个返回意味着发送缓冲区中的数据被系统缓冲区缓存并且开始发送,就是说,返回时发送缓冲区可以被覆盖了。
就绪通信模式
只有当接收操作起动时,发送操作才能开始,否则发送操作会出错。对于非阻塞发送操作的正确返回,不等于发送完成,但对于阻塞发送的正确返回,发送缓冲区可被覆盖。
这是一个特别的通信模式,所以,一般在使用时,会先起动接收操作,然后再向发送进程发消息,发送进程收到这个消息后,才会开始进行发送操作。