2012-07-11 31 views
5

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?

+0

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ự. –

Trả lời

3

Như đã đề cập bởi Jonathan Dursi trong bình luận của mình: các thói quen giao tiếp với chữ cái đầu tiên (ví dụ: Sendrecv()) chỉ có thể giao tiếp "bộ nhớ đệm", tức là cấu trúc dữ liệu cung cấp một API C nhất định. Các mảng có cấu trúc dường như không phải là một cấu trúc dữ liệu như vậy. Để gửi đi, hãy sử dụng sendrecv().

Xem tài liệu MPI4Py tại http://mpi4py.scipy.org/docs/usrman/mpi4py.html.

Các vấn đề liên quan