数字python的运行时编译器。
parakeet的Python项目详细描述
鹦鹉
Parakeet是面向数组的 Python。如果你在python中做大量的数字运算,长尾鹦鹉 可能会显著加快代码的速度。
要加速函数,请用鹦鹉螺的@jit装饰符将其包装起来:
import numpy as np from parakeet import jit x = np.array([1,2,3]) y = np.tanh(x * alpha) + beta @jit def fast(x, alpha = 0.5, beta = 0.3): return np.tanh(x * alpha) + beta @jit def loopy(x, alpha = 0.5, beta = 0.3): y = np.empty_like(x, dtype = float) for i in xrange(len(x)): y[i] = np.tanh(x[i] * alpha) + beta return y @jit def comprehension(x, alpha = 0.5, beta = 0.3): return np.array([np.tanh(xi*alpha) + beta for xi in x]) assert np.allclose(fast(x), y) assert np.allclose(loopy(x), y) assert np.allclose(comprehension(x), y)
安装
通过运行:
pip install parakeet
依赖关系
Parakeet是为Python2.7(抱歉的Internet)编写的,它依赖于:
默认后端(使用openmp)需要gcc4.4+。
windows:如果安装了32位windows,编译器应该 来自Cygwin或 MinGW。让鹦鹉在64位上工作 windows是非常重要的,似乎需要colossal hacks。
mac os x:默认情况下,您的计算机可能只有 clang或过时的gcc版本。你 可以使用 HomeBrew
如果你想使用cuda后端,你需要一个nvidia图形 卡上并安装CUDA Toolkit和 PyCUDA。
它是如何工作的?
非类型化函数用作多个类型的模板 生成专门化(对于每个不同的输入类型集)。 这些类型化的函数在之前经过了许多优化 最后被翻译成本地代码。
更多信息
- 阅读project website上有关长尾鹦鹉的更多信息
- 在discussion group上提问
- 注意Parakeet presentation从 今年的PyData Boston,看看 HotPar slides 从去年开始
- 直接与main developer联系
支持的语言功能
parakeet不能加速任意python代码,它只支持 语言的有限子集:
- 标量运算(即x + 3 * y)
- 控制流(if语句、循环等)
- 嵌套函数和lambda
- 元组
- 切片
- numpy数组表达式(即x[1:, :] + 2 * y[:-1, ::2])
- 一些numpy库函数,比如np.ones和np.sin(看看 这个 mappings 完整列表的模块)
- 列表文本(解释为数组构造)
- 列表理解(解释为数组理解)
- 长尾鹦鹉的高阶数组操作,如parakeet.imap, parakeet.scan,和parakeet.allpairs
后端
parakeet目前支持编译到sequential c,multi-core c 使用openmp(默认)或llvm(已弃用)。在这些之间切换 选项将parakeet.config.backend更改为以下选项之一:
- “openmp”:使用gcc编译,并行运算符跨多个 核心(默认)
- “c”:将所有并行运算符降低为循环,编译顺序运算符 使用gcc编码
- “cuda”:在gpu上启动并行操作(实验性)
- “llvm”:旧的后端已经落后,有些程序可能没有 工作
- “interp”:用于调试优化的纯python intepreter, 如果您认为cpython对于您的 品味