【发布时间】:2011-05-03 02:20:27
【问题描述】:
我正在为 Python 寻找一个好的 OpenCL 包装器\库,并提供良好的文档。我试图搜索一些......但找不到足够好的。
【问题讨论】:
我正在为 Python 寻找一个好的 OpenCL 包装器\库,并提供良好的文档。我试图搜索一些......但找不到足够好的。
【问题讨论】:
最流行和记录最好的选项似乎是PyOpenCL。它声称是 OpenCL 的完整包装器,并且文档看起来不错。
【讨论】:
pycl 是绑定到 OpenCL 的 ctypes(托管 on bitbucket)
它的主要目标很简单:以这样一种方式包装 OpenCL,以便尽可能多的 Python 实现可以使用它。它目前在 CPython 2.{5,6,7}、3.2 和 PyPy 1.5 上进行了测试。众所周知,它在很大程度上不适用于 Jython,它的 ctypes 库仍然不成熟。
为了实现这一点,我们避开了标准库之外的扩展模块和依赖项。理想情况下,像 NumPy 数组和 PIL 图像这样的东西应该只是工作,但它们不应该是必需的
目前还很新。我最近一直在玩它,它运行良好。与 PyOpenCL 相比,没有完成计时,但性能似乎完全合理
我不适用于 OS X 10.6 的 OpenCL 1.0(和 AMD Radeon 5870,see here),但在 10.7 和 OpenCL 1.1 下完美运行
至于文档,它是对 C 库的相当直接的绑定,因此任何文档都将适用。 "Adventures in PyOpenCL" 也很好,几乎适用于所有绑定
【讨论】:
我们正在开发opencl4py,更高级别的绑定。该项目使用 CFFI,因此可以在 Pypy 上运行。
我们在使用 pyopencl 时遇到的主要问题是“import pyopencl”会执行 OpenCL 初始化并在 NVIDIA 驱动程序的情况下占用整个虚拟内存,从而阻止正确的分叉并有效地禁用多处理(是的,我们声称使用 pyopencl 会禁用多处理至少与 NVIDIA)。 opencl4py 使用惰性 OpenCL 初始化,解决了这个“导入地狱”。
后来,它获得了一些不错的功能,例如超级简单的二进制程序缓存等。不幸的是,文档有点简短。了解其工作原理的最佳方法是通过测试。
【讨论】: