5

NumPyの構造化配列を使用して、MPI4Pyでデータを送受信しようとしています。以下は私の配列構造です:

numpy.zeros(FILE_LINES, dtype='i4,54b')

そして私は次のようにデータを交換するためにSendrecvメソッドを使用しています:

comm.Sendrecv(data_send, dest=partner_rank, sendtag=data_tag, \
        recvbuf=data_receive, source=partner_rank, recvtag=data_tag, status=None)

しかし、通信メソッドが呼び出されると例外が発生します。

Traceback (most recent call last):
  File "bipy.py", line 91, in <module>
  bitonic_sort()
File "bipy.py", line 72, in bitonic_sort
  bitonic_merge(i, ixj, (i & k) == 0)
File "bipy.py", line 51, in bitonic_merge
  recvbuf=data_receive, source=partner_rank, recvtag=data_tag, status=None)
File "Comm.pyx", line 166, in mpi4py.MPI.Comm.Sendrecv (src/mpi4py.MPI.c:58898)
File "message.pxi", line 318, in mpi4py.MPI.message_p2p_send (src/mpi4py.MPI.c:21422)
File "message.pxi", line 301, in mpi4py.MPI._p_msg_p2p.for_send (src/mpi4py.MPI.c:21285)
File "message.pxi", line 111, in mpi4py.MPI.message_simple (src/mpi4py.MPI.c:19256)
File "message.pxi", line 58, in mpi4py.MPI.message_basic (src/mpi4py.MPI.c:18509)
KeyError: 'T{=l:f0:(54)b:f1:}'

これは、1つのデータ型(たとえば、すべてのバイト)のみの配列を使用する場合に機能します。MPI4Pyはこれらの構造化配列を送信できませんか、それとも何か間違ったことをしていますか?

4

1 に答える 1

4

Jonathan Dursiがコメントですでに述べたように、大文字の最初の文字(eg Sendrecv())を使用した通信ルーチンは、「メモリバッファ」、つまり特定のCAPIを提供するデータ構造のみを通信できます。構造化配列は、そのようなデータ構造ではないようです。とにかく送信するには、を使用しますsendrecv()

http://mpi4py.scipy.org/docs/usrman/mpi4py.htmlのMPI4Pyドキュメントを参照してください。

于 2012-07-12T09:31:14.113 に答える