【並行計算】MPI.COMM_WORLD.Get_rank 與 .Get_size
1.簡單介紹:
我們在使用MPI進行編程時,往往可以寫一個代碼文件,分發給很多個不同的進程同時執行,那麼如何區分誰是誰呢?這就需要用到Get_rank()函數來確定當前代碼的編號。
有的時候我們還希望用某個特定的進程來執行一些操作,比如我們希望使用編號爲0的進程,來把所有的進程的數據再進行一些處理,那麼0號進程就需要指導一共有多少個進程,這時就需要用到Get_size()函數。
2.Talking is Cheap, Show me the Code!
將下面的代碼保存爲:size_rank.py
from mpi4py import MPI
comm = MPI.COMM_WORLD
size = comm.Get_size()
rank = comm.Get_rank()
if rank == 0:
print('I\'m process %d, and there are %d process total.' % (rank, size))
else:
print('Ok, I\'m process %d' % rank)
3.運行效果
由於寫文章的時候沒有帶Ubuntu的筆記本,只好在Windows下寫了一下,還配置了好一會,如果大家也遇到些問題,可以參考最後我列出的一篇博客,寫的挺好的。
我們這裏使用的是Anaconda Prompt執行命令:
mpiexec -n 4 python size_rank.py
效果如下:
(base) C:\Users\44375\Documents\python_proj>mpiexec -n 4 python size_rank.py
I'm process 0, and there are 4 process total.
Ok, I'm process 1
Ok, I'm process 2
Ok, I'm process 3
其他:
如果你使用的是Windows操作系統,配置上的問題可以參考下面這篇文章:
1.肉鬆松鼠, windows上安裝mpi4py