2014-12-05 58 views
1

嗨,大家好,我是新來的,所以請原諒我,如果我犯了任何錯誤。我使用python爲我的主人項目編寫了一些代碼,並且最近開始使用mpi4py來使我的代碼平行,因爲我有12個內核可用,也用於時間目的。由於某種原因,我不能讓bcast功能正常工作。我想在根進程中編制T2,然後將其廣播到所有其他進程。我的代碼如下:用於python廣播的MPI

from mpi4py import MPI 
from qutip import* 
from scipy import* 
from pylab import* 
from numpy import* 

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

N0=10 
N1=N0 
N2=N0 
d_ep=0.031 
I_s=qeye(2) 

if rank==0: 
    T2=0 
    for k in range (0,N1): 
     n1=basis(N1+N2,k+N1) 
     kk=k+1 
     T2=T2+kk*(n1*n1.dag()) 
    T2=(d_ep/N1)*tensor(I_s,T2) 
else: 
    T2=0 

comm.bcast(T2, root=0) 

print T2,rank 

但是當我運行這段代碼的輸出我得到的是這樣的:

0 1 
0 2 
0 3 
0 4 
Quantum object: dims = [[2, 4], [2, 4]], shape = [8, 8], type = oper, isherm = True 
Qobj data = 
[[ 0.  0.  0.  0.  0.  0.  0.  0. ] 
[ 0.  0.  0.  0.  0.  0.  0.  0. ] 
[ 0.  0.  0.0155 0.  0.  0.  0.  0. ] 
[ 0.  0.  0.  0.031 0.  0.  0.  0. ] 
[ 0.  0.  0.  0.  0.  0.  0.  0. ] 
[ 0.  0.  0.  0.  0.  0.  0.  0. ] 
[ 0.  0.  0.  0.  0.  0.  0.0155 0. ] 
[ 0.  0.  0.  0.  0.  0.  0.  0.031 ]] 0 

它並制定出在根T2,但它沒有把它播出其他他們都是0。任何人都可以告訴我我做錯了什麼,謝謝。

回答

0

你必須使用:

T2 = comm.bcast(T2, root=0) 

這是根據mpi4py tutorial.

+0

你好非常感謝你我一直在這幾天的bcast的正確用法!我會看看你發佈的鏈接。令人驚訝的是,MPI附帶的所有教程所附帶的實際文檔沒有提及您的變量必須等於他們直接編寫bcast函數的bcast函數。 – Nirav 2014-12-07 21:44:16