在hpc平台上执行python的一个子集

compyle的Python项目详细描述


Travis StatusAppveyor StatusDocumentation Status

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目录中提供了一些简单的示例和基准测试。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何加载。java文件到编译器?   java写入文件和I/O   java日历返回错误的当前日期安卓   if语句if变量等于1(java)   java很难让Joda有时间使用我的bukkit插件   json如何创建基于java的应用程序,该应用程序将从网站获取输入   java如何在多页中打印大型JPanel   java my spinner在添加从firebase数据库中选择的多个值时被覆盖   java用Play框架覆盖HTTP方法   试图获取所有用户时,java错误请求400。Dto和表格   java支持bean加载图像后javascript自动调用JS函数   java在MTOM的@StreamingAttachment(Metro)中,Parsely的意思是什么   具有可抢占线程队列的多线程java执行器   Java Opencv connectedComponentsWithStats   java如何向数组中添加2D数组的数目   eclipse为什么我的Java Zork克隆不能正确循环?   java在哪里放置定制的第二个web。xml   java如何更改最近应用列表中显示的快照?   java Browser#getText()返回空字符串