【问题标题】:OpenCL for Python用于 Python 的 OpenCL
【发布时间】:2011-05-03 02:20:27
【问题描述】:

我正在为 Python 寻找一个好的 OpenCL 包装器\库,并提供良好的文档。我试图搜索一些......但找不到足够好的。

【问题讨论】:

    标签: python opencl


    【解决方案1】:

    最流行和记录最好的选项似乎是PyOpenCL。它声称是 OpenCL 的完整包装器,并且文档看起来不错。

    【讨论】:

    • 噢。 tnx .. 似乎我不是从官方网站下载 PyOpenCL .. 这就是为什么我没有找到它的文档...
    【解决方案2】:

    CLytherPyOpenCL 在我看来都很好地记录在案。

    【讨论】:

    • CLyther 远比 PyOpenCL 不成熟,尽管文档看起来很棒。
    【解决方案3】:

    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" 也很好,几乎适用于所有绑定

    【讨论】:

      【解决方案4】:

      我们正在开发opencl4py,更高级别的绑定。该项目使用 CFFI,因此可以在 Pypy 上运行。

      我们在使用 pyopencl 时遇到的主要问题是“import pyopencl”会执行 OpenCL 初始化并在 NVIDIA 驱动程序的情况下占用整个虚拟内存,从而阻止正确的分叉并有效地禁用多处理(是的,我们声称使用 pyopencl 会禁用多处理至少与 NVIDIA)。 opencl4py 使用惰性 OpenCL 初始化,解决了这个“导入地狱”。

      后来,它获得了一些不错的功能,例如超级简单的二进制程序缓存等。不幸的是,文档有点简短。了解其工作原理的最佳方法是通过测试。

      【讨论】:

      • PyOpenCL 作者在这里。我对您的陈述最有意义的是 opencl4py 在导入时不会加载 libOpenCL.so 。如果这是一个问题(正如您所声称的),那么为什么不将 PyOpenCL 准确地导入到需要的地方呢?不确定我是否理解您的动机。
      • 作为进一步的评论,PyOpenCL 有一个cffi branch,可以启动内核并在 PyPy 上工作。它还没有为黄金时段做好准备,但它已经到了那里。
      • 我们的应用程序有几十个使用 OpenCL 的模块,延迟导入会使代码很容易出错。每次有人“比他应该更早地”导入 pyOpenCL 都会导致非常难以调试和诊断错误……有时 :) 当然,它可以在开发人员的机器上与非 NVIDIA OpenCL 设备一起使用。
      • 尽管 opencl4py API 目前看起来与 pyOpenCL 相似,但我们正计划根据我们以前的经验重新考虑它。
      猜你喜欢
      • 2014-06-15
      • 2016-06-17
      • 1970-01-01
      • 2012-05-07
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      相关资源
      最近更新 更多