Skip to main content

在 HPC 平台上执行 Python 的子集

项目描述

CI 状态 覆盖状态 文件状态

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

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

提供了一些简单但功能强大的并行实用程序,可以让您解决大量有趣的 HPC 问题。Compyle 还具有 JIT 转译功能,使其易于使用。

文档和学习材料也以以下形式提供:

虽然 Compyle 看起来很简单,但它并不是一个玩具,它被 Compyle 起源的PySPH项目大量使用。

安装

Compyle 本身在很大程度上是纯 Python,但依赖于numpy,并且需要CythonPyOpenCLPyCUDA以及 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)

这将使用 OpenMP 和 Cython 并行执行元素操作。代码是自动生成、编译并以透明方式为您调用的。第一次运行时,编译所有内容需要一些时间,但下一次,它会被缓存并且运行得更快。

如果您只是更改backend = 'opencl' ,将使用PyOpenCL执行完全相同的代码,如果您将后端更改为'cuda',它将通过 CUDA 执行,而无需对您的代码进行任何其他更改。这显然是一个非常微不足道的例子,还有更复杂的例子可用。

例子

示例目录中提供了一些简单的示例和基准测试。

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

下载文件

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

源分布

compyle-0.8.1.tar.gz (125.5 kB 查看哈希)

已上传 source