Tôi đang cố gắng gửi và nhận dữ liệu trong MPI4Py, sử dụng mảng có cấu trúc từ NumPy. Sau đây là cấu trúc mảng của tôi:Gửi và nhận dữ liệu mảng có cấu trúc trong MPI4Py bằng cách sử dụng NumPy
numpy.zeros(FILE_LINES, dtype='i4,54b')
và tôi đang sử dụng phương pháp Sendrecv để trao đổi dữ liệu, như sau:
comm.Sendrecv(data_send, dest=partner_rank, sendtag=data_tag, \
recvbuf=data_receive, source=partner_rank, recvtag=data_tag, status=None)
Nhưng tôi nhận được một ngoại lệ khi các phương pháp giao tiếp được gọi là:
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:}'
Nó hoạt động khi sử dụng một mảng chỉ có một kiểu dữ liệu (tất cả các byte, ví dụ). MPI4Py không thể gửi các mảng có cấu trúc này hay tôi đang làm gì sai?
Tôi nghĩ rằng các chức năng Sendrecv() - type chỉ có thể gửi các mảng Numpy của một loại duy nhất. Bạn luôn có thể sử dụng sendrecv() (chữ thường) có thể gửi các đối tượng python chung, nhưng sau đó bạn sẽ có phí trên đầu tuần tự. –