NumPy

2012-07-11 18 views
5

का उपयोग कर MPI4Py में संरचित सरणी डेटा भेजना और प्राप्त करना मैं NumPy से संरचित सरणी का उपयोग करके MPI4Py में डेटा भेजने और प्राप्त करने का प्रयास कर रहा हूं। इस प्रकार,NumPy

numpy.zeros(FILE_LINES, dtype='i4,54b') 

और मैं डेटा का आदान प्रदान के लिए Sendrecv विधि का उपयोग कर रहा: निम्नलिखित मेरी सरणी संरचना है

comm.Sendrecv(data_send, dest=partner_rank, sendtag=data_tag, \ 
     recvbuf=data_receive, source=partner_rank, recvtag=data_tag, status=None) 

लेकिन मैं एक अपवाद जब संचार पद्धति कहा जाता है:

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:}' 

यह केवल एक डेटाटाइप (उदाहरण के लिए सभी बाइट्स) के साथ सरणी का उपयोग करते समय काम करता है। क्या एमपीआई 4 इन संरचित सरणी भेजने में सक्षम नहीं है, या क्या मैं कुछ गलत कर रहा हूं?

+0

मुझे लगता है कि Sendrecv() - प्रकार के फ़ंक्शंस केवल एक प्रकार के नम्पी सरणी भेज सकते हैं। आप हमेशा sendrecv() (लोअरकेस) का उपयोग कर सकते हैं जो जेनेरिक पायथन ऑब्जेक्ट्स भेज सकता है, लेकिन फिर आपके पास सीरियलाइजेशन ओवरहेड होगा। –

उत्तर

3

जैसा कि पहले से ही जोनाथन डर्सि ने अपनी टिप्पणी में उल्लेख किया है: पूंजी के पहले पत्र (जैसे Sendrecv()) के साथ संचार दिनचर्या केवल "मेमोरी बफर" को संवाद कर सकती है, यानी डेटा संरचनाएं जो एक निश्चित सी एपीआई प्रदान करती हैं। संरचित सरणी ऐसी डेटा संरचना प्रतीत नहीं होती है। इसे किसी भी तरह भेजने के लिए, sendrecv() का उपयोग करें।

MPI4Py दस्तावेज़ों में http://mpi4py.scipy.org/docs/usrman/mpi4py.html पर देखें।