5

Python を使用した MPI は初めてで、ここでいくつかの問題が発生しています。これは私のコードです:

from mpi4py import MPI

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

if rank == 0:
        a = 1 
        comm.bcast(a, root=0)
        s = comm.reduce(a, op=MPI.SUM)
        print 'From process 0, sum =', s
elif rank == 1:
        b = 2
        comm.bcast(b, root=1)  
        x = comm.reduce(b, op=MPI.SUM)
        print 'From process 1, sum =', x

印刷したい:From process PROCESS_NUMBER, sum = 3

プロセス 0 は正しく印刷されますが、プロセス 1 は None を印刷します。

理由がわかりません。誰でも私を助けることができますか?

4

2 に答える 2

4
  1. 集合操作 ( Bcast、 ) はすべてのプロセスで呼び出す必要があるため、 ステートメントReduce内に配置するのは正しくありません。if rank == N
  2. 2 番目の reduce では、 を指定する必要がありますroot=1
  3. ブロードキャストで割り当てが必要ですa = comm.bcast(a, root=0)

修正されたコード:

from mpi4py import MPI

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

if rank == 0:
        a = 1
else:
        a = None
a = comm.bcast(a, root=0)
s = comm.reduce(a, op=MPI.SUM)
if rank == 0:
        print 'From process 0, sum =', s

if rank == 1:
        b = 2
else:
        b = None
b = comm.bcast(b, root=1)
x = comm.reduce(b, op=MPI.SUM, root=1)

if rank == 1:
        print 'From process 1, sum =', x

3 つのプロセスで実行した結果:

From process 0, sum = 3
From process 1, sum = 6
于 2015-07-03T18:47:35.753 に答える