欢迎阅读PyCUDA的文档!#

PyCUDA为您提供了轻松的Python访问英伟迪亚CUDA公司并行计算API。的几个包装CUDA API已经存在–那么为什么需要PyCUDA?

  • 对象清理与对象的生存期相关。这个成语,经常被呼叫RAII公司在C++中,使编写正确、泄漏和无碰撞代码。PyCUDA也知道依赖关系,所以(例如)它不会在分配给它的所有内存都被分配之前从上下文中分离释放。

  • 方便。抽象,如皮库达公司。源模块pycuda.gpuarray。GPU阵列使CUDA编程更加方便与Nvidia基于C的运行时相比。

  • 完整性。PyCUDA将CUDA驱动程序API的全部功能用于如果你愿意的话,可以进行处理。

  • 自动错误检查。自动翻译所有CUDA错误到Python异常中。

  • 速度。PyCUDA的底层是用C++编写的,因此上面的所有细节实际上是免费的。

  • 有用的文档。你在看它

下面是一个例子,给你一个印象:

进口 pycuda.autonit公司
进口 皮库达河 作为 数字参考车
进口 笨蛋

 皮库达公司 进口 源模块
国防部 = 源模块("""
__全局__void multiply_them(浮点*dest,浮点*a,浮点*b)
{
const int i=线程Idx.x;
目标[i]=a[i]*b[i];
}
""")

多个_他们 = 国防部.获取函数(“multiply_them”)

 = 笨蛋.随机的,随机的.兰登(400).astype类型(笨蛋.浮动32)
b条 = 笨蛋.随机的,随机的.兰登(400).astype类型(笨蛋.浮动32)

目的地 = 笨蛋.类零()
多个_他们(
        数字参考车.输出(目的地), 数字参考车.(), 数字参考车.(b条),
        =(400,1,1), 网格=(1,1))

打印(目的地-*b条)

(本例为示例/hello_gpu.py在PyCUDA源分布。)

从表面上看,这个程序会打印出一屏幕的零。后面场景,还有很多有趣的事情:

  • PyCUDA编译了CUDA源代码并将其上传到卡中。

    注释

    这段代码不一定是常量——你可以很容易地拥有Python生成要编译的代码。请参见元编程.

  • PyCUDA的numpy交互代码已自动分配设备上的空间,复制numpy阵列b条结束,启动了400x1x1单块网格,并复制了目的地返回。

    请注意,您也可以将卡上的数据保存在内核调用&无需一直复制数据。

  • 看到示例中没有清理代码了吗?这并不是因为我们我们很懒,只是跳过了。根本不需要。PyCUDA将自动推断需要什么清理,并为您进行清理。

好奇吗?让我们开始吧。

使用/增强PyCUDA的其他软件#

根据定义,此列表不完整!如果你知道其他软件感觉应该列在这里,请提交一份公关!

目录#

请注意,本指南不会解释CUDA编程和技术。拜托参考英伟达编程文档为了这个。

PyCUDA也有自己的网站,您可以在其中找到更新、新版本、文档和支持。

索引和表格#