Sto tentando di inviare e ricevere dati in MPI4Py, utilizzando l'array strutturato di NumPy. Quanto segue è la mia struttura a matrice:Invio e ricezione di dati di array strutturati in MPI4Py utilizzando NumPy
numpy.zeros(FILE_LINES, dtype='i4,54b')
e sto usando il metodo sendrecv per lo scambio dei dati, come segue:
comm.Sendrecv(data_send, dest=partner_rank, sendtag=data_tag, \
recvbuf=data_receive, source=partner_rank, recvtag=data_tag, status=None)
ma ottengo un'eccezione quando il metodo di comunicazione si chiama:
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:}'
Funziona quando si utilizza un array con un solo tipo di dati (tutti i byte, ad esempio). MPI4Py non è in grado di inviare questi array strutturati o sto facendo qualcosa di sbagliato?
Penso che le funzioni di tipo Sendrecv() possano solo inviare matrici Numpy di un singolo tipo. Puoi sempre usare sendrecv() (in minuscolo) che può inviare oggetti Python generici, ma poi avrai il sovraccarico di serializzazione. –