有时候,一个进程需要给另一个进程发送数据,同时接受第三个进程的数据。如果是Send和Recv来实现,需要开启两次通讯域。MPI提供了Sendrecv来以开启一次通讯域的成本来达到上述目的。该函数的具体代码如下:
共10个输入参数,前五个与Send相同,后五个与Recv相同。发送缓冲区(变量)和接收缓冲区(变量)必须分开, 但可以是不同长度和类型。
完整示例代码如下:
在三核的HP台式机上的运行结果如下:
Machine Name: Justin
Current Process ID: 1
Total Number of Processes: 3
The 2nd process before receiving data:11.1
Machine Name: Justin
Current Process ID: 2
Total Number of Processes: 3
The 3rd process before receiving data:-9.9
The 3rd process after receiving data:-89.1
The 2nd process after receiving data:-10
Machine Name: Justin
Current Process ID: 0
Total Number of Processes: 3