在HPC平台上执行Python的子集
项目描述
Compyle允许用户在多种HPC平台上执行Python的受限子集(几乎类似于C)。目前我们支持使用Cython的多核CPU执行,对于GPU设备,我们使用OpenCL或CUDA。
用户从使用非常受限的Python语法实现代码开始,然后自动将其转换为源代码,编译并执行,以在单个CPU核心、多个CPU核心(通过OpenMP)或GPU上运行。Compyle提供源到源的转换,使其成为编写HPC库的非常方便的工具。
提供了一些简单但功能强大的并行实用工具,可以帮助你解决大量有趣的高性能计算问题。Compyle还支持即时转换,使其易于使用。
文档和学习资料也可以下列形式获得
在《SciPy 2020论文》中介绍了在编写并行分子动力学模拟器时使用compyle的相关内容。
您还可以在Google Colab笔记本上免费尝试Compyle。
虽然Compyle看起来很简单,但它并非玩具,并且被其起源地PySPH项目广泛使用。
安装
Compyle自身主要是纯Python编写的,但依赖于numpy,并需要Cython、PyOpenCL或PyCUDA,以及相应的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笔记本上运行这些示例