跳转到主要内容

分布式数组的一个非常轻量级的实现

项目描述

mumpy

在Python中使N维并行计算变得简单

概述

mumpy是一个非常轻量级的分布式数组实现,它可以在从多核笔记本电脑到大型MPI集群的各种架构上运行。mumpy基于numpy和mpi4py,并支持任意数量的维度。进程可以使用“getData”方法访问远程数据。这可以用来访问邻近的鬼数据,但更为灵活,因为它允许从任何进程访问数据——不一定是一个邻近的进程。mumpy旨在无缝地与numpy的切片操作符ufunc等一起工作,使代码转移到并行计算环境变得容易。

alt tag 4核心桌面512^3拉普拉斯的加速

如何获取mumpy

git clone https://github.com/pletzer/mumpy.git

如何构建mumpy

mumpy需要

  • python 3.5或更高版本
  • numpy
  • MPI库(例如MPICH2)
  • mpi4py,例如3.x
python setup.py install

或者,如果您需要root权限,

sudo python setup.py install

或者,您可以使用

pip install mumpy

或者

pip install mumpy --user

如何测试mumpy

运行tests/目录下的任何文件,例如

cd tests
mpiexec -n 4 python testDistArray.py

如何使用mumpy

要并行运行脚本myScript.py,使用

mpiexec -n numProcs python <myScript.py>

其中numProcs是进程数。

numpy数组的轻量级扩展

将mumpy数组视为具有附加数据成员和访问邻近数据的成员和方法的普通numpy数组。

要创建一个带有幽灵的分布式数组(gda),使用

from mumpy import gdaZeros
da = gdaZeros((4, 5), numpy.float32, numGhosts=1)

上面的例子创建了一个4 x 5的float32数组,用零填充——语法应该对使用numpy数组的任何人来说都很熟悉。

所有numpy操作都适用于mumpy分布式数组,没有任何变化,这包括切片。请注意,切片操作是针对本地数组索引的。

在上文中,numGhosts 描述了晕环区域的厚度,即数组中可以由其他进程访问的数据切片。numGhosts = 1 的值表示晕环深度为一。晕环越厚,通信成本越高,因为需要从进程之间复制更多数据。

对于二维数组,晕环可以分解为四个区域

  • da[:numGhosts, :] => 西
  • da[-numGhosts:, :] => 东
  • da[:, :numGhosts] => 南
  • da[:, -numGhosts:] => 北

(在n维空间中,有2n个区域。)NumPy使用一个元组来标识每个晕环区域

  • (-1, 0) => 西
  • (1, 0) => 东
  • (0, -1) => 南
  • (0, 1) => 北

要访问远程进程otherRk的南部区域数据,请使用

southData = da.getData(otherRk, winID=(0, -1))

使用常规域分解

上述方法适用于任何域分解,不一定非要是常规的。在全局数组被分割成均匀数据块的情况下,otherRk可以通过局部rank和一个偏移向量推断出来

from mumpy import CubeDecomp
decomp = CubeDecomp(numProcs, dims)
...
otherRk = decomp.getNeighborProc(self, da.getMPIRank(), offset=(0, 1), periodic=(True, False))

其中numProcs是进程数,dims是全局数组的维度,periodic是一个表示域是否周期性的True/False值的元组。在没有相邻rank的情况(因为本地da.getMPIRank() rank位于域边界),getNeighborProc可能返回None。在这种情况下,getData也将返回None。

非常高层次

对于拉普拉斯算子,可以考虑使用

from mumpy import Laplacian
lapl = Laplacian(decomp, periodic=(True, False))

将拉普拉斯算子应用于任何类似NumPy的数组 inp 然后简单地进行

out = lapl.apply(inp)

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

mpinum-1.4.3.tar.gz (22.1 kB 查看哈希值)

上传时间

构建分布

mpinum-1.4.3-py3-none-any.whl (17.7 kB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面