跳转到主要内容

在HPC平台上执行Python的子集

项目描述

CI Status Coverage Status Documentation Status

Compyle允许用户在多种HPC平台上执行Python的受限子集(几乎类似于C)。目前我们支持使用Cython的多核CPU执行,对于GPU设备,我们使用OpenCL或CUDA。

用户从使用非常受限的Python语法实现代码开始,然后自动将其转换为源代码,编译并执行,以在单个CPU核心、多个CPU核心(通过OpenMP)或GPU上运行。Compyle提供源到源的转换,使其成为编写HPC库的非常方便的工具。

提供了一些简单但功能强大的并行实用工具,可以帮助你解决大量有趣的高性能计算问题。Compyle还支持即时转换,使其易于使用。

文档和学习资料也可以下列形式获得

虽然Compyle看起来很简单,但它并非玩具,并且被其起源地PySPH项目广泛使用。

安装

Compyle自身主要是纯Python编写的,但依赖于numpy,并需要Cython、PyOpenCLPyCUDA,以及相应的C/C++编译器后端、OpenCL和CUDA。如果你只打算在CPU上执行代码,那么你只需要Cython。

你可以通过以下方式安装Compyle:

$ pip install compyle

一个简单的例子

这里有一个非常简单的例子

from compyle.api import Elementwise, annotate, wrap, get_config
import numpy as np

@annotate
def axpb(i, x, y, a, b):
    y[i] = a*sin(x[i]) + b

x = np.linspace(0, 1, 10000)
y = np.zeros_like(x)
a, b = 2.0, 3.0

backend = 'cython'
get_config().use_openmp = True
x, y = wrap(x, y, backend=backend)
e = Elementwise(axpb, backend=backend)
e(x, y, a, b)

这将使用Cython并行执行逐元素操作,并通过OpenMP。代码会自动生成、编译并为你透明调用。第一次运行时,编译所有内容需要一点时间,但下次运行时,它会缓存并运行得更快。

如果你将backend = 'opencl',相同的代码将通过PyOpenCL执行,如果你将后端改为'cuda',它将通过CUDA执行,而无需对代码进行任何其他更改。这显然是一个非常简单的例子,还有更多复杂示例可供参考。

示例

一些简单示例和基准测试可以在示例目录中找到。

你也可以在Google Colab笔记本上运行这些示例

项目详情


下载文件

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

源分布

compyle-0.8.1.tar.gz (125.5 kB 查看散列)

上传时间

支持者