pyOpenCL和opencl4py之间的区别

时间:2014-05-04 20:04:22

标签: python opencl pyopencl

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

  

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

     

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

     

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

"禁用[s]多处理"意思?比如,它不能同时在几个设备上运行内核吗?

当然,它可以,我试图说导入pyopencl后,os.fork()或multiprocessing.Process()导致NVIDIA OpenCL用户空间库内的崩溃。在导入过程中做工作总是一个坏主意。