pyOpenCL和opencl4py之间的区别

5 python opencl pyopencl

今天我偶然发现了stackoverflow中的帖子(另见这里):

我们正在开发opencl4py,更高级别的绑定.这个项目使用CFFI,所以它适用于Pypy.

我们遇到的pyopencl的主要问题是'import pyopencl'执行OpenCL初始化并在NVIDIA驱动程序的情况下获取整个虚拟内存,防止正确分叉并有效禁用多处理(是的,我们声称使用pyopencl禁用多处理至少使用NVIDIA ).opencl4py使用惰性OpenCL初始化,解决这个"导入地狱".

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

由于还有pyOpenCL,我想知道这两个包之间的区别是什么.有谁知道我在哪里可以找到关于这两个包的专业人士和骗子的概述?

编辑:包括benshope的评论,因为我也会感兴趣:"禁用[s]多处理"是什么意思?比如,它不能同时在几个设备上运行内核?

mar*_*hor 3

据我所知,还没有这样的概述。我将尝试列出一些要点:

  • pyOpenCL是一个成熟的项目,拥有比较庞大的用户群。有教程、FAQ等。opencl4py出现于03/2014;没有教程、常见问题解答等 - 只有单元测试和文档字符串。
  • pyOpenCL 是本机 cPython 扩展,而 opencl4py 使用cffi,因此它可以在PyPy上运行(pyOpenCL 不能),并且不需要每次 cPython 更改版本时重新编译。
  • PyOpenCL 有额外的功能,例如随机数生成器和 OpenGL 互操作性。
  • opencl4py 在三星生产实际场景中进行了广泛测试,并且正在积极开发中。

“禁用多处理”是什么意思?比如,它不能同时在多个设备上运行内核?

当然可以,我想说的是,导入 pyopencl 后,os.fork() 或 multiprocessing.Process() 会导致 NVIDIA OpenCL 用户空间库内部崩溃。在导入过程中进行工作始终是个坏主意。

  • PyOpenCL 作者在这里。据我所知,PyOpenCL 在导入方面没有做任何工作,如果做了,那就是一个应该报告的错误。不完全确定是否值得在这个问题上启动一个新项目...就其价值而言,PyOpenCL 有一个在 cffi 之上工作的[分支](https://github.com/pyopencl/pyopencl/tree/cffi),因此在 PyPy 上。它运行良好,足以启动内核,但仍有很长的路要走。 (5认同)