NumbaPro ¶
NumbaPro是一个加强版Numba它增加了高级特性和功能,允许开发人员快速创建优化的代码,集成以及与NumPy的。
使用 NumbaPro,Python 开发人员可以在 Python 中定义 NumPy ufuncs和广义 ufuncs (gufuncs),它们被动态编译为机器代码并动态加载。此外,NumbaPro 使开发人员能够使用适用于 ufunc 和通用代码的 Python 代码来定位多核和 GPU 架构。
针对 GPU,NumbaPro 可以自动完成工作,尽最大努力优化 GPU 架构的代码。或者,提供基于 CUDA 的 API 用于专门在 Python 中编写CUDA代码,以便最终控制硬件(具有线程和块标识)。
入门¶
让我们从一个简单的函数开始,将两个 NumPy 数组中的所有成对值相加。要求 NumbaPro 将此 Python 函数编译为向量化机器代码以在 CPU 上执行就像添加一行代码一样简单(通过函数的装饰器调用):
从 numbapro 导入 向量化
@vectorize ([ 'float32(float32, float32)' ], target = 'cpu' )
def sum ( a , b ):
return a + b
类似地,您可以通过修改上面示例中的一行来改为将 GPU 定位为执行相同的 Python 函数:
@vectorize(['float32(float32, float32)'], target='gpu')
以 GPU 为执行目标引入了许多特定于 GPU 的优化的潜力,因此作为更复杂场景的起点,人们还可以通过其Just-In-Time (JIT) 编译器使用 NumbaPro 来定位 GPU :
从 numbapro 进口 cuda
@库达。jit ( 'void(float32[:], float32[:], float32[:])' )
def sum ( a , b , result ):
i = cuda . grid ( 1 ) # 等于 threadIdx.x + blockIdx.x * blockDim.x
result [ i ] = a [ i ] + b [ i ]
# 调用如下: sum[grid_dim, block_dim](big_input_1, big_input_2, result_array)
功能¶
以下是突出显示的功能列表:
- 通过 ufuncs 和 gufuncs 对单核 CPU、多核 CPU 和 GPU 进行便携式数据并行编程
- 与 CUDA 库的绑定:cuRAND、cuBLAS、cuFFT
- Python CUDA 编程,最大限度地控制硬件资源
通过例子学习¶
开发人员团队维护一个公共GitHub 示例存储库。许多示例旨在展示使用 GPU 的潜在性能提升。
要求¶
根据:
- 蟒蛇 2.6、2.7、3.3、3.4
- LLVM 3.3
对于 CUDA GPU 功能:
- 最新的 NVIDIA CUDA 驱动程序
- CUDA Toolkit 5.5 或以上
- 至少一个计算能力2.0或以上的CUDA GPU
Python模块:
- llvmpy 0.12.7 或以上
- numba 0.14.0 或以上
发行说明¶
- 版本 (0.21.0)
- 版本 (0.20.0)
- 版本 (0.19.0)
- 版本 (0.18.0)
- 版本 (0.17.1)
- 版本 (0.17.0)
- 版本 (0.16.0)
- 版本 (0.15.0)
- 版本 (0.14.3)
- 版本 (0.14.2)
- 版本 (0.14.1)
- 版本 (0.14.0)
- 版本 (0.13.2)
- 版本 (0.13.1)
- 版本 (0.13)
- 版本 (0.12.7)
- 版本 (0.12.6)
- 版本 (0.12.5)
- 版本 (0.12.4)
- 版本 (0.12.3)
- 版本 (0.12.2)
- 版本 (0.12.1)
- 版本 (0.12.0)
- 版本 (0.11.0)
- 版本 (0.10.1)
- 版本 (0.10)
- 版本 (0.9)
- 版本 0.8
- 版本 0.7
- 0.6 及更早版本