本文主要是介绍MPI学习-MPI_Sendrecv and MPI_Sendrecv_replace,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
死锁现象:点对点通信中存在死锁现象:
MPI_Send 与MPI_Recv
1.MPI_Send调用返回时表明数据已被发出或被MPI系统复制,随后对发送缓冲区的修改不会改变所发送的数据;
2.MPI_Recv返回时表明数据接收已经完成;
3.让计算和通信重叠进行,通常先等待receive的完成,然后做计算,再等待send的完成。
4.需要采用MPI_Test()检测传输是否结束时;
5.MPI_Send可以以两种不同的方式实现:
- 将消息复制到MPI设置的缓冲区并返回;
- 直到对应的MPI_Recv出现前都阻塞
6.造成死锁的最大因素在于多个进程同时发出消息,再同时接收消息;
- 因为若是每个进程都阻塞在MPI_Send上,则没有程序调用MPI_Recv,程序则会死锁
7.解除死锁可以使一些进程先接收消息再发送消息。
MPI_Sendrecv and MPI_Sendrecv_replace
可以自动实现数据交换,解除死锁问题.
语法规范:
这篇关于MPI学习-MPI_Sendrecv and MPI_Sendrecv_replace的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!