【並行計算】點對點通信(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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章