【并行计算】点对点通信(Point to Point Communication)

【并行计算】点对点通信(Point to Point Communication)

1.简单介绍

  在进行并行计算时,各个进程之间并不一定是完全独立的,当然有的时候确实是完全独立的。但是还有很多时候,比如大规模计算,我们可能把计算任务拆分给各个进程,因此还要进行合并,比如对一万个数进行求和运算,如果每个进程先算两个数的和,然后再和其他进程的结果加起来,这样就需要通信。
  本文主要介绍的是最基本的点对点通信(Point to Point),在并行计算中非常常用。

2.Talking is Cheap, Show me the Code!

将下面的代码保存为exp_comm_p2p.py:

# point to point communication
# using 2 process to show

from mpi4py import MPI
import numpy as np

comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()

tr_buff = np.zeros(1)   # to store data to transfer or receive

if rank == 0:
    tr_buff[0] = 1
    print('Process %d: I\'ll send number %d to Process 1' % (rank, tr_buff[0]))
    comm.Send(tr_buff, dest=1)

if rank == 1:
    comm.Recv(tr_buff, source=0)
    print('Process %d: I\'ve received %d from Process 0' % (rank, tr_buff[0]))

3.代码部分介绍

  在点对点通信中,最重要的两行代码就是发送和接收的MPI.COMM_WORLD.Send()MPI.COMM_WORLD.Recv(),发送函数的dest参数指的是要发送到的进程号,接收函数的source参数指的是信息源的进程号。
  其第一个参数一般指发送和接受的缓冲区,可以用数组、列表等。

comm.Send(tr_buff, dest=1)
comm.Recv(tr_buff, source=0)

4.执行效果

  我们在命令行中执行: mpiexec -n 2 python exp_comm_p2p.py,可以看到输出如下:

(base) C:\Users\44375\Documents\python_proj>mpiexec -n 2 python exp_comm_p2p.py
Process 0: I'll send number 1 to Process 1
Process 1: I've received 1 from Process 0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章