【Python - GPU】基于Python的GPU加速并行计算 -- pyCUDA

Python实现的CUDA – pyCUDA

Nvidia的CUDA 架构为我们提供了一种便捷的方式来直接操纵GPU 并进行编程,但是基于
C语言的CUDA实现较为复杂,开发周期较长。而python 作为一门广泛使用的语言,具有
简单易学、语法简单、开发迅速等优点。作为第四种CUDA支持语言,相信python一定会
在高性能计算上有杰出的贡献–pyCUDA。

  • pyCUDA特点

  • pyCUDA工作流程

  • 调用的基本例子

  • 包含内容

【Python - GPU】基于Python的GPU加速并行计算 -- pyCUDA_第1张图片

pyCUDA特点

  • CUDA完全的python实现

  • 编码更为灵活、迅速、自适应调节代码

  • 更好的鲁棒性,自动管理目标生命周期和错误检测

  • 包含易用的工具包,包括基于GPU的线性代数库、reduction和scan,添加了快速傅里叶变换包和线性代数包LAPACK

  • 完整的帮助文档Wiki

pyCUDA的工作流程

具体的调用流程如下:

Created with Raphaël 2.1.0 开始 编写python程序 python程序检查? 调用pyCUDA编译CUDA 源码并上传GPU 编译正确? PyCUDA’s numpy进行数据读入处理 数据读入处理成功? 输出GPU 加速处理结果 结束 yes no yes no yes

调用基本例子

import pycuda.autoinit
import pycuda.driver as drv
import numpy

from pycuda.compiler import SourceModule
mod = SourceModule("""
__global__ void multiply_them(float *dest, float *a, float *b)
{
  const int i = threadIdx.x;
  dest[i] = a[i] * b[i];
}
""")

multiply_them = mod.get_function("multiply_them")

a = numpy.random.randn(400).astype(numpy.float32)
b = numpy.random.randn(400).astype(numpy.float32)

dest = numpy.zeros_like(a)
multiply_them(
        drv.Out(dest), drv.In(a), drv.In(b),
        block=(400,1,1), grid=(1,1))

print dest-a*b

#tips: copy from hello_gpu.py in the package.

具体内容

  • 设备交互

  • Profiler Control

  • 动态编译

  • OpenGL交互

  • GPU数组

  • 超编程技术

补充内容:对于GPU 加速python还有功能包,例如处理图像的pythonGPU加速包—— pyGPU

以及专门的GPU 加速python机器学习包—— scikitCUDA

Matlab对应的工具包并行计算工具箱和GPU计算技术
以及教程和介绍文档

你可能感兴趣的:(编程,python,gpu,cuda,并行计算)