欢迎使用PyOpenCL的文档!#

通过PyOpenCL,您可以轻松、高效地访问 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)
knl = prg.sum  # Use this Kernel object for repeated calls
knl(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源代码发行版中。)

教程#

使用或增强PyOpenCL的软件#

  • Jon Roose's pyclblas (code) makes BLAS in the form of clBLAS available from within pyopencl code.

    两个较早的包装器继续可用:一个由 Eric Hunsberger 还有一个是 Lars Ericson

  • Cedric Nugteren为 CLBlast OpenCL BLAS库: PyCLBlast

  • 格雷戈尔·萨哈默的 gpyfft 为AMD的OpenCL FFT库clFFT提供了一个Python包装器。

  • 博格丹·奥潘丘克的 reikna 提供各种基于GPU的算法(FFT、随机数生成、矩阵乘法),旨在与 pyopencl.array.Array 物体。

  • Troels Henriksen,Ken Friis Larsen和Cosmin Oancea Futhark 编程语言提供了一种编写嵌套并行程序的好方法,它减少和扫描了 pyopencl.array.Array 实例。

  • 罗伯特·哈姆斯和阿拉德·罗布罗克 MOT 提供各种支持GPU的非线性优化算法和MCMC采样例程,用于并行优化和采样多个问题。

  • 文森特·法弗尔-尼科林的 pyvkfft vbl.使 vkfft 可从PyOpenCL访问。

如果你知道一个软件,你觉得应该在这个名单上,请让我知道,或者,更好的,发送一个补丁!

目录#

请注意,本指南不解释OpenCL编程和技术。请向官方咨询 Khronos OpenCL documentation 就因为这个。

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

索引和表格#