python - pyOpenCL 和 opencl4py 的区别

标签 python opencl pyopencl

今天我在 stackoverflow 中偶然发现了一篇帖子(另请参阅 here):

We are developing opencl4py, higher level bindings. This project uses CFFI, so it works on Pypy.

The major issue we encountered with pyopencl is that 'import pyopencl' does OpenCL initialization and takes the whole virtual memory in case of NVIDIA driver, preventing from correct forking and effectively disabling multiprocessing (yes, we claim that using pyopencl disables multiprocessing at least with NVIDIA). opencl4py uses lazy OpenCL initialization, resolving this "import hell".

Later, it gained some nice features like super easy binary program caching, etc. Unfortunately, the documentation is somewhat brief. The best way to learn how it works is go through the tests.

因为还有 pyOpenCL,我一直在想这两个包之间的区别是什么。有人知道我在哪里可以找到关于这两个软件包的优缺点的概述吗?

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

最佳答案

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

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

what does "disable[s] multiprocessing" mean? Like, it can't run kernels on several devices at one time?

当然可以,我是想说导入 pyopencl 后,os.fork() 或 multiprocessing.Process() 会导致 NVIDIA OpenCL 用户空间库崩溃。在导入期间进行工作总是一个坏主意。

关于python - pyOpenCL 和 opencl4py 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23460997/

相关文章:

python - 如何在 Django 管理详细信息页面中添加下载文件的链接?

python - 将列表移动到 csv 的更好方法?

python - Nomad 中的多个 bash 命令

C++ cmake 抛出错误

c - OpenCL clCreateBuffer() 使程序崩溃

python - Pyopencl:to_device 和 Buffer 的区别

c - 包含 header OpenCL(32 位与 64 位)

python - 如何将 mp3 转换为 ogg python

opencl - 非常奇怪的 OpenCL CL_OUT_OF_RESOURCES 行为

python - PyOpenCL 第一次运行返回错误,然后只有 'invalid program' 错误;例子也不起作用