Ich versuche, Daten in MPI4Py zu senden und zu empfangen, mit dem strukturierten Array von NumPy. Im Folgenden ist meine Array-Struktur:Senden und Empfangen von strukturierten Array-Daten in MPI4Py mit NumPy
numpy.zeros(FILE_LINES, dtype='i4,54b')
und ich die sendrecv Methode verwende die Daten für den Austausch wie folgt:
comm.Sendrecv(data_send, dest=partner_rank, sendtag=data_tag, \
recvbuf=data_receive, source=partner_rank, recvtag=data_tag, status=None)
Aber ich eine Ausnahme erhalten, wenn die Kommunikation Methode aufgerufen wird:
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:}'
Es funktioniert, wenn nur mit einem Datentyp (alle Bytes, zum Beispiel) ein Array verwendet wird. Kann MPI4Py diese strukturierten Arrays nicht senden oder mache ich etwas falsch?
ich denke, die sendrecv() - Typ-Funktionen nur Numpy Arrays von einer einzigen Art senden. Sie können immer sendrecv() (Kleinbuchstaben) verwenden, die generische Python-Objekte senden können, aber dann haben Sie den Serialisierungs-Overhead. –