模拟mpi4py进行测试的工具
MockM的Python项目详细描述
概述
消息传递接口(MPI)是一种基于进程间显式通信的并行方法。Python绑定可以通过mpi4py获得。在
测试使用MPI的代码可能会很尴尬。这个包提供了一个纯python mock MPI通信器,可以使用它来执行此操作,而不需要实际的MPI。它使用多重处理来 启动进程并生成一个模拟通信器(comm)对象,该对象将替代 mpi4型py.MPI.COMM峎WORLD公司. 在
安装
代码是纯python;可以使用以下工具安装:
pip install mockmpi
使用
定义一个函数,该函数保存应在MPI会话中工作的代码:
^{pr2}$如果这是一个真正的MPI会话,它的工作方式应该是:
import mpi4py
comm = MPI.COMM_WORLD
function_to_test(comm)
您将与mpiexec -n nproc ...
一起运行
要在不使用MPI的情况下测试代码,请从此包导入mock-mpiexec并运行:
mock_mpiexec(nproc, function_to_test)
额外的参数
您还可以为mock_mpiexec
提供附加的命名或位置参数,它们将
传递给function_to_test
:
mock_mpiexec(nproc, function_to_test, 1, 2, 3, a='b')
模仿:
import mpi4py
comm = MPI.COMM_WORLD
function_to_test(comm, 1, 2, 3, a='b')
如果参数可以被pickle(对于大多数基本的python和numpy类型都是这样),那么这就可以工作了。在
注意事项
- 它在python3.5+上运行
- 完全没有注意到如何使这一点更有效率。这个代码 设计用于单元测试,而不是用于生产。在
- 目前只有内部命令对象被模仿,而不是许多其他特性 比如运营商,未来,拓扑,窗口,生成。。。在
- 目前缺少许多方法。目前只实现了以下内容。其他人将提高
NotImplementedError
- 获得排名
- 获取\u大小
- 障碍物
- 发送-与真正的MPI不同,它是非阻塞的
- 发送-也无阻塞
- 接收
- 接收
- 障碍物
- bcast公司
- Bcast公司
- 分散
- reduce(仅使用默认的和运算)
- Reduce(仅使用默认的和运算)
- 全减
- 全减
- 全部
- 集合
出资和许可
我们非常欢迎您的贡献,特别是填补缺失的功能。在
代码和任何贡献都是在bsd2条款许可下发布的(参见许可文件)。在
- 项目
标签: