在hpc平台上执行python的一个子集
compyle的Python项目详细描述
compyle允许用户执行python的一个子集(几乎类似 c)在各种高性能混凝土平台上。目前我们支持多核执行 使用cython,opencl和cuda作为gpu设备。
用户从使用非常受限的python语法实现的代码开始,这段代码 然后被自动地转译、编译和执行以在任一CPU上运行 核心,或多个CPU核心(通过OpenMP)或在一个GPU上。CPY优惠 源代码到源代码的转换,使它成为编写hpc的一个非常方便的工具 图书馆。
提供了一些简单而强大的并行实用程序,允许您 解决大量有趣的hpc问题。
compyle还具有jit转印功能,如果您希望使其易于使用。
文档位于:https://compyle.readthedocs.io
虽然compyle看起来很简单,但它不是一个玩具,而且被PySPH大量使用。 compyle起源的项目。
安装
compyle本身是纯python,但依赖于numpy,需要Cython 或{a9}或PyCUDA以及C/C++编译器各自的后端, opencl和cuda。如果你只想在CPU上执行代码 需要的是赛顿。
您应该可以通过执行以下操作来安装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与并行执行elementwise操作 赛顿。代码会自动生成、编译并透明地调用。 第一次运行时,将需要一点时间来编译除 下一次,它会被缓存,运行速度会快得多。
如果您只是更改backend = 'opencl',那么相同的代码将是 使用PyOpenCL执行,如果将后端更改为'cuda',它将 通过CUDA执行,不需要对代码进行任何其他更改。这显然是 很小的例子,也有更复杂的例子。
示例
在examples目录中提供了一些简单的示例和基准测试。