我们在MPI 通信模式里面最感受到的精华就是是否依赖与接收进程 那么现在我们来谈谈这个特性
依赖接收进程 那么发送那端就使用无缓冲方式通信 这样的方式可以大大改善其性能 比如标准通信 这种模式 添加了缓冲区 但是它的安全性能得到了保障 随时可以实现点对点同步通信 但是就绪通信 他非得等到接收进程recv之后才可以进行发送 但是这种依赖导致了效率极大的提升 跨过了三次握手 还要缓冲操作 相当于UDP 和TCP 通信区别 标准模式的情况 MPI_Send 总会发送信息 然后缓冲到缓存区 然后立刻返回MPI_Send函数调用 之后等待MPI_Recv端启动 然后立即发送 这个情况下其实也就是相当于 实现了同步操作 反是依赖于接收进程 那么就是不需要缓冲区 这种模式 依赖久相反
继续说说并发 其实在mpi中会存在发送和接收顺序的不一致 这个时候我们使用的就是同步通信 MPI_Ssend 或者实现同步通信的一致效果的方式 其实这种情况我们也可以使用就绪通信 但是我们需要确保语义顺序的一致 但是高并发往往使用MPI_ANY_SOURCE 进行通信 所以使用同步更妥善点
其实 我们实现最好的通信安全性 最好使用无缓冲机制 因为有缓冲机制会导致缓冲不够 等等一些 网络流不稳定的特点 所以使用无缓冲的方式最好 这种程序换成有缓冲也可以实现同样的效果 可移植性最好 但是性能不一定最优 所以我们需要去了解非阻塞的通信方式 这种方式性能会更高的提升 不会像同步通信那种方式 有缺陷
谈谈MPI的就绪通信和缓冲通信
最新推荐文章于 2023-07-02 23:11:05 发布