python - 使用 NumPy 在 MPI4Py 中发送和接收结构化数组数据

标签 python numpy mpi mpi4py

我正在尝试使用 NumPy 中的结构化数组在 MPI4Py 中发送和接收数据。以下是我的数组结构:

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

它在使用只有一种数据类型(例如,所有字节)的数组时有效。是 MPI4Py 无法发送这些结构化数组,还是我做错了什么?

最佳答案

Jonathan Dursi 在他的评论中已经提到:首字母大写的通信例程(例如 Sendrecv())只能与“内存缓冲区”通信,即提供特定 C API 的数据结构.结构化数组似乎不是这样的数据结构。 要发送它,请使用 sendrecv()

请参阅位于 http://mpi4py.scipy.org/docs/usrman/mpi4py.html 的 MPI4Py 文档.

关于python - 使用 NumPy 在 MPI4Py 中发送和接收结构化数组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11427878/

相关文章:

python - os.mkdir(linux_path) 在 Windows 中运行时不会抛出错误

python - 更新后数据流作业保留旧的错误状态

python - 如何使用 Python 访问我的 Firefox 配置文件中的页面

python - 将 Numpy 中的矩阵列表相乘

python - numpy的转置方法无法将一维行ndarray转换为一列

c++ - mpi Hello World 不工作

c++ - MPI-reduce 操作中的求和顺序

python - 如何将 Dropbox SDK 导入 Google App Engine 应用程序?

c# - Numpy.NET 获取值

c++ - 读取文本文件并在 C/C++ 中仅获取每行最后一个整数的结果