का उपयोग कर 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 इन संरचित सरणी भेजने में सक्षम नहीं है, या क्या मैं कुछ गलत कर रहा हूं?
मुझे लगता है कि Sendrecv() - प्रकार के फ़ंक्शंस केवल एक प्रकार के नम्पी सरणी भेज सकते हैं। आप हमेशा sendrecv() (लोअरकेस) का उपयोग कर सकते हैं जो जेनेरिक पायथन ऑब्जेक्ट्स भेज सकता है, लेकिन फिर आपके पास सीरियलाइजेशन ओवरहेड होगा। –