欢迎使用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源代码发行版中。)
教程#
加斯顿·希勒的 two-part article series 在Dr.Dobb‘s Journal中提供了对PyOpenCL的友好介绍。
Simon McIntosh-Smith 和 Tom Deakin 的课程 Hands-on OpenCL 两者都包含 lecture slides 和 exercises (with solutions) (本课程涵盖了PyOpenCL以及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的OpenCL FFT库clFFT提供了一个Python包装器。
博格丹·奥潘丘克的 reikna 提供各种基于GPU的算法(FFT、随机数生成、矩阵乘法),旨在与
pyopencl.array.Array
物体。Troels Henriksen,Ken Friis Larsen和Cosmin Oancea Futhark 编程语言提供了一种编写嵌套并行程序的好方法,它减少和扫描了
pyopencl.array.Array
实例。罗伯特·哈姆斯和阿拉德·罗布罗克 MOT 提供各种支持GPU的非线性优化算法和MCMC采样例程,用于并行优化和采样多个问题。
如果你知道一个软件,你觉得应该在这个名单上,请让我知道,或者,更好的,发送一个补丁!
目录#
- OpenCL运行时:基础
- OpenCL运行时:常量
addressing_mode
channel_order
channel_type
command_execution_status
command_queue_info
command_queue_properties
command_type
context_info
context_properties
device_affinity_domain
device_atomic_capabilities
device_device_enqueue_capabilities
device_exec_capabilities
device_fp_config
device_info
device_local_mem_type
device_mem_cache_type
device_partition_property
device_svm_capabilities
device_topology_type_amd
device_type
event_info
filter_mode
gl_context_info
image_info
kernel_arg_access_qualifier
kernel_arg_address_qualifier
kernel_arg_info
kernel_arg_type_qualifier
kernel_info
kernel_sub_group_info
kernel_work_group_info
khronos_vendor_id
map_flags
mem_flags
mem_info
mem_migration_flags
mem_object_type
pipe_info
pipe_properties
platform_info
profiling_info
program_binary_type
program_build_info
program_info
program_kind
queue_properties
sampler_info
sampler_properties
status_code
svm_mem_flags
version_bits
NameVersion
DeviceTopologyAmd
- OpenCL运行时:平台、设备和上下文
- OpenCL运行时:命令队列和事件
- OpenCL运行时:内存
- OpenCL运行时:程序和内核
- OpenCL运行时:OpenGL互操作性
- 内置公用设施
- 多维数组
- OpenCL类型映射
- 并行算法
- 操作指南
- 安装
- 提示
- 指南
- 用户可见的更改
- 未发布
- 版本2022.2
- 版本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 ,您可以在其中找到更新、新版本、文档和支持。