NumbaPro

NumbaPro 快速入门 [pdf]

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 或以上