欢迎阅读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条 )
PyCUDA编译了CUDA源代码并将其上传到卡中。 注释 这段代码不一定是常量——你可以很容易地拥有Python 生成要编译的代码。 请参见 元编程 . PyCUDA的numpy交互代码已自动分配 设备上的空间,复制numpy阵列 一 和 b条 结束, 启动了400x1x1单块网格,并复制了 目的地 返回。 请注意,您也可以将卡上的数据保存在 内核调用&无需一直复制数据。 看到示例中没有清理代码了吗? 这并不是因为我们 我们很懒,只是跳过了。根本不需要。 PyCUDA将 自动推断需要什么清理,并为您进行清理。