繁体   English   中英

mpi4py 在函数之间广播 numpy 数组

[英]mpi4py broadcasting numpy arrays between functions

我是 MPI 的初学者,我正在尝试制作一个简单的示例程序,其中主程序向工作程序发送一个 numpy 数组。 唯一的问题是这些必须在不同的主函数和工作函数之间工作。 这是一个实践问题,用于弄清楚为什么在更大的项目中的类似设置当前不起作用。 我发现的所有使用 Bcast 的示例都没有包含有关如何使其在不同模块或函数调用之间工作的任何提示。

这是代码:

 from mpi4py import MPI import numpy as np comm = MPI.COMM_WORLD rank = comm.rank def master(): data = np.arange(4.0) comm.Bcast([data, MPI.DOUBLE], root=0) print('rank',rank,data) return() def worker(): data = np.zeros(4) data = comm.Bcast([data, MPI.DOUBLE], root=0) print('rank',rank,data) return() if rank == 0: master() else: worker()

这是当前的输出:

 rank 1 None rank 2 None rank 0 [0. 1. 2. 3.] rank 3 None

我不确定为什么这个版本不起作用。 使用列表的几乎相同的版本可以正常工作。

我要感谢评论者如此迅速地回复。 为了让它更明显,这就是工作函数应该是这样的:

 def worker(): data = np.zeros(4) #do not set data equal to Bcast call comm.Bcast([data, MPI.DOUBLE], root=0) print('rank',rank,data) return()

感谢 Gilles Gouaillardet 的帮助。 这是一个简单的解决方案,它甚至看起来像是我的 Fortran 模块的工作版本,但我在尝试用 Python 编写项目时遇到了重新创建示例的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM