欢迎使用PyOpenCL的文档!¶
PyOpenCL使您可以方便地通过Pythonic访问 OpenCL 并行计算API。是什么让PyOpenCL与众不同?
对象清理绑定到对象的生存期。这个成语,常被称为 RAII 在C++中,编写更为正确的、无泄漏和无崩溃的代码更容易。
完整性。如果您愿意,PyOpenCL可以将OpenCL的API的全部功能交给您使用。每一个模糊的 get_info() 查询和所有CL调用都是可访问的。
自动错误检查。所有错误都会自动转换为Python异常。
速度。PyopCl的底层是用C++编写的,所以上面的所有细节都是免费的。
有用的文件。你在看。;
自由许可证。PyOpenCL是 MIT license 免费供商业、学术和私人使用。
举个例子,给你一个印象:
#!/usr/bin/env python
import numpy as np
import pyopencl as cl
a_np = np.random.rand(50000).astype(np.float32)
b_np = np.random.rand(50000).astype(np.float32)
ctx = cl.create_some_context()
queue = cl.CommandQueue(ctx)
mf = cl.mem_flags
a_g = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=a_np)
b_g = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=b_np)
prg = cl.Program(ctx, """
__kernel void sum(
__global const float *a_g, __global const float *b_g, __global float *res_g)
{
int gid = get_global_id(0);
res_g[gid] = a_g[gid] + b_g[gid];
}
""").build()
res_g = cl.Buffer(ctx, mf.WRITE_ONLY, a_np.nbytes)
prg.sum(queue, a_np.shape, None, a_g, b_g, res_g)
res_np = np.empty_like(a_np)
cl.enqueue_copy(queue, res_np, res_g)
# Check on CPU with Numpy:
print(res_np - (a_np + b_np))
print(np.linalg.norm(res_np - (a_np + b_np)))
assert np.allclose(res_np, a_np + b_np)
(你可以找到这个例子 examples/demo.py
在PyOpenCL源代码发行版中。)
教程¶
加斯顿希拉氏 two-part article series 在Dobb博士的期刊中,我们友好地介绍了PyOpenCL。
Simon McIntosh-Smith 和 Tom Deakin 的课程 Hands-on OpenCL 包含两者 lecture slides 和 exercises (with solutions) (课程涵盖PyopCopl以及OpenCL的C和C++ API)。
PyOpenCL课程 DTU GPULab 和 Simula (2011): Lecture 1 Lecture 2 Problem set 1 Problem set 2
伊恩·约翰逊的 PyOpenCL tutorial .
使用或增强PyOpenCL的软件¶
Jon Roose's pyclblas (code) makes BLAS in the form of clBLAS available from within
pyopencl
code.两个早期的包装器仍然可用:一个由 Eric Hunsberger 一个接一个 Lars Ericson .
格雷戈瑟尔哈默的 gpyfft 为AMD的openclfft库clFFT提供Python包装器。
博格丹奥潘丘克 reikna 提供各种基于GPU的算法(FFT、随机数生成、矩阵乘法),用于
pyopencl.array.Array
物体。Troels Henriksen、Ken Fris Larsen和Cosmin Oancea's Futhark 编程语言提供了一种很好的方法来编写嵌套的并行程序,并对数据进行缩减和扫描
pyopencl.array.Array
实例。Robbert Harms和Alard Roebroeck的 MOT 提供各种GPU支持的非线性优化算法和MCMC采样例程,用于并行优化和多问题采样。
如果你知道一个软件,你觉得应该在这个名单上,请让我知道,或者,更好的,发送一个补丁!
目录¶
- OpenCL运行时:基础
- OpenCL运行时:常量
- OpenCL运行时:平台、设备和上下文
- OpenCL运行时:命令队列和事件
- OpenCL运行时:内存
- OpenCL运行时:程序和内核
- OpenCL运行时:OpenGL互操作性
- 多维数组
- OpenCL类型映射
- 并行算法
- 操作指南
- 内置公用设施
- 安装
- 提示
- 指南
- 用户可见的更改
- 版本2020.3
- 版本2020.2
- 版本2018.2
- 版本2018.1
- 2017.2版
- 2017.1版
- 2016.2版
- 2016.1版
- 版本2015.2.4
- 版本2015.2.3
- 版本2015.2.2
- 版本2015.2.1
- 2015.2版
- 2015.1版
- 2014.1版
- 版本2013.2
- 2013.1版
- 2012.1版
- 版本2011.2
- 版本2011.1.2
- 版本2011.1.1
- 版本2011.1
- 版本0.92
- 版本0.91.5
- 版本0.91.4
- 版本0.91.3
- 版本0.91.2
- 版本0.91.1
- 版本0.91
- 版本0.90.4
- 版本0.90.3
- 版本0.90.2
- 版本0.90.1
- 版本0.90
- 许可
- 常见问题
- 引用PyOpenCL
- 致谢
- 文件交叉引用
- 🚀 github
- 💾 下载发行版
请注意,本指南没有解释OpenCL编程和技术。请向官方咨询 Khronos OpenCL documentation 为此。
PyOpenCL也有自己的 web site ,您可以在其中找到更新、新版本、文档和支持。