Estoy tratando de enviar y recibir datos en MPI4Py, usando la matriz estructurada de NumPy. La siguiente es la estructura de mi matriz:Enviar y recibir datos de matriz estructurados en MPI4Py usando NumPy
numpy.zeros(FILE_LINES, dtype='i4,54b')
y estoy usando el método sendrecv para el intercambio de los datos, de la siguiente manera:
comm.Sendrecv(data_send, dest=partner_rank, sendtag=data_tag, \
recvbuf=data_receive, source=partner_rank, recvtag=data_tag, status=None)
pero me da una excepción cuando se llama al método de comunicación:
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:}'
Funciona cuando se utiliza una matriz con un solo tipo de datos (todos los bytes, por ejemplo). ¿MPI4Py no puede enviar estas matrices estructuradas, o estoy haciendo algo mal?
Creo que las funciones de tipo Sendrecv() solo pueden enviar matrices Numpy de un solo tipo. Siempre puede usar sendrecv() (minúscula) que puede enviar objetos python genéricos, pero luego tendrá la sobrecarga de serialización. –