2

MPI4Py Python モジュールの Scatter 関数に問題があります。私の仮定は、sendbuffer の単一のリストを渡すことができるはずだということです。ただし、それを行うか、実際に他の 2 つの引数、recvbuf と root を追加すると、一貫したエラー メッセージが表示されます。

  File "code/step3.py", line 682, in subbox_grid
    i = mpi_communicator.Scatter(station_range, station_data)
  File "Comm.pyx", line 427, in mpi4py.MPI.Comm.Scatter (src/
mpi4py_MPI.c:44993)
  File "message.pxi", line 321, in mpi4py.MPI._p_msg_cco.for_scatter
(src/mpi4py_MPI.c:14497)
  File "message.pxi", line 232, in mpi4py.MPI._p_msg_cco.for_cco_send
(src/mpi4py_MPI.c:13630)
  File "message.pxi", line 36, in mpi4py.MPI.message_simple (src/
mpi4py_MPI.c:11904)
ValueError: message: expecting 2 or 3 items

これは、上記の 682 より上の数行から始まる、関連するコードを抜粋したものです。

for station in stations
        #snip--do some stuff with station
        station_data = []
        station_range = range(1,len(station))
        mpi_communicator = MPI.COMM_WORLD
        i = mpi_communicator.Scatter(station_range, nsm)
        #snip--do some stuff with station[i]
        nsm = combine(avg, wt, dnew, nf1, nl1, wti[i], wtm, station[i].id)
        station_data = mpi_communicator.Gather(station_range, nsm)

station_range を初期化するいくつかの組み合わせを試しましたが、Scatter 引数の型を正しく理解していないに違いありません。

Python/MPI の第一人者はこれを明確にしていますか?

4

1 に答える 1

6

生のバッファを ( のように) 移動したい場合Gatherは、トリプレットを指定し[buffer, size, type]ます。この例については、デモをご覧ください。Python オブジェクトを送信する場合は、より高いレベルのインターフェイスを使用し、内部gatherで使用する呼び出し (小文字に注意) を使用する必要があります。pickle

于 2010-09-14T20:29:17.920 に答える