MPI4Py导致发送/接收错误 [英] MPI4Py causes error on send/recv

查看:506
本文介绍了MPI4Py导致发送/接收错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人可以告诉我为什么这个最小的工作示例(MWE)抱怨TypeError: expected a writeable buffer object吗?

Can someone tell me why this minimal working example (MWE) complains of TypeError: expected a writeable buffer object?

MWE:

#!/usr/bin/env python
from mpi4py import MPI

# MPI Initialization
rank = MPI.COMM_WORLD.Get_rank()
comm = MPI.COMM_WORLD

if __name__ == '__main__':
   a = True
   if rank == 0:
      a = False
      comm.Send ( [ a, MPI.BOOL ], 1, 111 )
   if rank == 1:
      comm.Recv ([ a, MPI.BOOL], 0, 111 )

错误:

Traceback (most recent call last):
  File "test.py", line 14, in <module>
    comm.Recv ([ a, MPI.BOOL], 0, 111 )
  File "Comm.pyx", line 143, in mpi4py.MPI.Comm.Recv (src/mpi4py.MPI.c:62980)
  File "message.pxi", line 323, in mpi4py.MPI.message_p2p_recv (src/mpi4py.MPI.c:22814)
  File "message.pxi", line 309, in mpi4py.MPI._p_msg_p2p.for_recv (src/mpi4py.MPI.c:22665)
  File "message.pxi", line 111, in mpi4py.MPI.message_simple (src/mpi4py.MPI.c:20516)
  File "message.pxi", line 51, in mpi4py.MPI.message_basic (src/mpi4py.MPI.c:19644)
  File "asbuffer.pxi", line 108, in mpi4py.MPI.getbuffer (src/mpi4py.MPI.c:6757)
  File "asbuffer.pxi", line 48, in mpi4py.MPI.PyObject_GetBufferEx (src/mpi4py.MPI.c:6081)
TypeError: expected a writeable buffer object
Traceback (most recent call last):
  File "test.py", line 12, in <module>
    comm.Send ( [ a, MPI.BOOL ], 1, 111 )
  File "Comm.pyx", line 132, in mpi4py.MPI.Comm.Send (src/mpi4py.MPI.c:62796)
  File "message.pxi", line 318, in mpi4py.MPI.message_p2p_send (src/mpi4py.MPI.c:22744)
  File "message.pxi", line 301, in mpi4py.MPI._p_msg_p2p.for_send (src/mpi4py.MPI.c:22604)
  File "message.pxi", line 111, in mpi4py.MPI.message_simple (src/mpi4py.MPI.c:20516)
  File "message.pxi", line 51, in mpi4py.MPI.message_basic (src/mpi4py.MPI.c:19644)
  File "asbuffer.pxi", line 108, in mpi4py.MPI.getbuffer (src/mpi4py.MPI.c:6757)
  File "asbuffer.pxi", line 50, in mpi4py.MPI.PyObject_GetBufferEx (src/mpi4py.MPI.c:6093)

===================================================================================
=   BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
=   EXIT CODE: 1
=   CLEANING UP REMAINING PROCESSES
=   YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
===================================================================================
[proxy:0:0@raspi1] HYD_pmcd_pmip_control_cmd_cb (./pm/pmiserv/pmip_cb.c:886): assert (!closed) failed
[proxy:0:0@raspi1] HYDT_dmxu_poll_wait_for_event (./tools/demux/demux_poll.c:77): callback returned error status
[proxy:0:0@raspi1] main (./pm/pmiserv/pmip.c:206): demux engine error waiting for event
[mpiexec@raspi1] HYDT_bscu_wait_for_completion (./tools/bootstrap/utils/bscu_wait.c:76): one of the processes terminated badly; aborting
[mpiexec@raspi1] HYDT_bsci_wait_for_completion (./tools/bootstrap/src/bsci_wait.c:23): launcher returned error waiting for completion
[mpiexec@raspi1] HYD_pmci_wait_for_completion (./pm/pmiserv/pmiserv_pmci.c:217): launcher returned error waiting for completion
[mpiexec@raspi1] main (./ui/mpich/mpiexec.c:331): process manager error waiting for completion

推荐答案

我不知道为什么会收到上述错误,所以如果有人知道,请回答,我会接受.话虽如此,如果我改用这种样式(旧代码已被注释掉),我就可以使代码工作:

I have no idea why I am getting the above error, so if anyone does know, please answer and I will accept. That being said, I can get the code to work if I use this style instead (old code commented out):

MWE:

#!/usr/bin/env python
from mpi4py import MPI

# MPI Initialization
rank = MPI.COMM_WORLD.Get_rank()
comm = MPI.COMM_WORLD

if __name__ == '__main__':
   a = True
   if rank == 0:
      a = False
      # comm.Send ( [ a, MPI.BOOL ], dest=1, tag=111 )
      comm.send ( a, dest=1, tag=111 )
   if rank == 1:
      # comm.Recv ([ a, MPI.BOOL], dest=0, tag=111 )
      a = comm.recv (source=0, tag=111 )

这篇关于MPI4Py导致发送/接收错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆