问题标签 [pyopencl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1667 浏览

c - 纯 C OpenCL 与 Python OpenCL 性能

我正在寻找 Python 包装器到 OpenCL 和 Pure C OpenCL 之间的性能测量。性能测量会随时间、内存等而变化。 - 是否有可用的基准?- 对时间性能差异的期望是什么?- 什么样的任务(当然是并行的......)应该有所作为?

0 投票
1 回答
671 浏览

numpy - PyOpenCL 将图像的每个像素上的内核还原为数组而不是每个字节(RGB 模式,24 位)

我正在尝试计算 RGB 图像的平均亮度。为此,我找到每个像素的亮度,即

L(r,g,b) = X*r + Y*g + Z*b (some linear combination).

然后通过将所有像素的亮度相加并除以宽度*高度来找到平均值。为了加快速度,我正在使用 pyopencl.reduction.ReductionKernel

我传递给它的数组是一个单维 Numpy 数组,因此它的工作方式与给出的示例一样。

我想将示例中的以下代码合并到其中。即我将对数据类型和我传递的数组类型进行更改。这是一个例子:

除此之外,我的 map_expr 将对每个像素起作用并将每个像素转换为其亮度值。而 reduce expr 保持不变。

问题是,它适用于数组中的每个元素,我需要它适用于每次 3 个连续元素(RGB)的每个像素。

一种解决方案是使用三个不同的数组,一个用于 R,一个用于 G,一个用于 B,这可行,但是还有其他方法吗?

0 投票
1 回答
496 浏览

python - pyOpenCL 和 opencl4py 的区别

今天我偶然发现了stackoverflow中的一篇文章(另请参见此处):

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

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

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

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

编辑:包括 benshope 的评论,因为我也会感兴趣:“禁用 [s] 多处理”是什么意思?就像,它不能一次在多台设备上运行内核?

0 投票
3 回答
5034 浏览

python - 在 Windows 上安装 pyopencl

我有一个 GTX 770,它显然安装了带有图形驱动程序的 opencl 1.1。但是我还是安装了 AMD APP(我有一个 AMD cpu),无论哪种方式都没有关系,因为 pyopencl 无法正常工作!它在导入时不断吐出相同的错误;

我运行的大多数opencl演示和程序都运行良好,所以我认为它pyopencl特别适用。我想我缺少一些依赖项,或者二进制文件是opencl在考虑更高版本的情况下编译的?我有 Visual Studio 2008 和 2010。我尝试安装 2013.1 和 2014.1 二进制文件。我想如果我setup.py.tar.gz运行, 我可能会有更好的运气,但这也行不通。不过,这更像是一般的事情,cygwincompiler.py没有找到我拥有的ld,gccdllwrap版本。

我已经尝试了很多东西,比如安装 .NET 和 boost,以及其他晦涩难懂的东西。我真的不知道该怎么办。我跑了“取决于”,但它显然不适用于 Windows 7 64 位。我也无法让 pycuda 工作,它会吐出几乎相同的错误消息。cuda 也可以正常工作。在这种情况下也可能是错误的版本,或者因为它们都是姐妹项目,所以作者还有一些我不知道的其他常见依赖项。

我用谷歌搜索了很多,似乎找不到解决方案。任何帮助表示赞赏。

0 投票
1 回答
689 浏览

numpy - 在numpy中获取页面对齐内存

有没有办法array在页面边界上分配 numpy 的数据部分(即数据)?

对于我关心的原因,如果我在 Intel 设备上使用 PyOpenCL,并且我想使用创建缓冲区CL_MEM_USE_HOST_PTR他们建议数据是 1)页面对齐和 2)大小为缓存行的倍数。

C 中有多种分配页面对齐内存的方法,例如:aligned malloc() in GCC?

0 投票
3 回答
2936 浏览

ubuntu - PyOpenCL Ubuntu Nvidia - 未找到平台

python-pyopencl使用 Ubuntu软件包安装后,PyOpenCL 无法访问我的 Nvidia 设备。这种安装 PyOpenCL 的方法用于使用相同的硬件和相同版本的 Ubuntu (14.10)。

当我运行pyopencl.get_platforms()错误消息是:

我尝试了不同的驱动程序、不同的软件包组合以及全新安装的操作系统。

如何在 Ubuntu 上为 Nvidia 卡安装 PyOpenCl?

更新 1

全新安装操作系统后,get_platforms()显示两个平台:AMD 和 Intel (beignet)。英伟达还是不行。

更新 2

http://wiki.tiker.net/OpenCLHowTo尝试了更多的东西后,python-pyopencl包现在抛出一个错误。

0 投票
1 回答
988 浏览

python - AttributeError:“CommandQueue”对象没有属性“dtype”

我正在尝试用 pyFFT 计算 FFT。但是下面的代码会导致错误。

ref_input 的类型为:

调试输出:

事实上我找不到'dtype'。但为什么?

0 投票
1 回答
1203 浏览

python - “GLXPlatform”对象没有属性“WGL”

我是 OpenGL/OpenCL 的初学者。我正在尝试执行 示例中的代码,但出现错误:

据我了解,WGL 是适用于 Windows 操作系统而不是 Linux 的 API。我之前应该以某种方式指定我的平台吗?或者我该如何解决这个问题?

提前致谢!

0 投票
2 回答
879 浏览

python-3.x - 在 GPU 上运行时,对同一数组的大量分配如何导致 pyopencl.LogicError?

我正在使用 pyOpenCL 进行一些复杂的计算。它在 CPU 上运行良好,但在 NVIDIA GeForce 9400M (256 MB) 上运行时出现错误。我正在使用 Mac OS X Lion (10.7.5)

奇怪的是,这个错误并不总是出现。当我的计算使用更大的数字(导致更大的迭代)但仅在 GPU 上运行时似乎会发生这种情况。

我不写我不应该写的内存位置。通过将代码作为单个工作项运行,我排除了并发修改可能出现的问题。


我尽可能简化了我的 OpenCL 代码,并从剩下的内容中创建了一些非常简单的代码,这些代码具有非常奇怪的行为,导致pyopencl.LogicError. 它由 2 个嵌套循环组成,其中对result数组进行了几个赋值。这种分配甚至不需要依赖于循环的状态。shape = (1,)这是在 GPU上的单个线程(或工作项)上运行的。

奇怪的是,删除结果数组的任一个分配都会删除错误。此外,减小外部的初始值((1<<20)-1例如降低到)也可以消除错误。在这些情况下,代码会正常返回,并在相应的缓冲区中提供正确的结果。在 CPU 上,它永远不会引发错误。


OpenCL 代码使用 PyOpenCL 从 Python 运行。

设置中没有什么花哨的:

在此 Python 代码中,我将 设置result_buf0,然后在 OpenCL 中运行计算,该计算将在大迭代中设置其值。之后我尝试从设备内存中收集这个值,但这就是出错的地方:

最后一行给了我:


  • 这种重复分配如何导致错误?

  • 更重要的是:如何避免?


我知道这个问题可能与平台有关,因此可能难以重现。但这是我唯一可以访问的机器,所以代码应该可以在这台机器上运行。

免责声明:我以前从未使用过 OpenCL(或 CUDA)。我在 GPU 不支持 OpenCL 的机器上编写代码。我总是在 CPU 上测试它。现在我切换到 GPU,我发现错误不会持续发生令人沮丧,我不知道为什么。

0 投票
1 回答
2106 浏览

python - 为什么不在我的 GPU (Ubuntu) 上运行 OpenCL

我通过从 multiverse 获取 python-pyopencl 并安装 amd app sdk 在我的笔记本电脑上设置了 pyopencl。为了获得 Nvidia ICD,我从驱动程序管理器中重新安装了最新的 Nvidia 驱动程序。

我的系统是 Thinkpad t540p, i7 4700hq, Nvidia gt 730m, 64bit Ubuntu 14.04

为了测试 opencl 安装,我运行了这个 pyopencl 示例:http ://wiki.tiker.net/PyOpenCL/Examples/MatrixMultiply

不幸的是,性能很差:只有 2 GFlop/s。当然,笔记本电脑可以做得更好。所以我打印了供应商信息。它是“GenuineIntel”,显然内核不是在 GPU 上运行,而是在 CPU 上运行。我该如何改变呢?

似乎 pyopencl 没有找到 GPU。

这仅返回“GenuineIntel”

上下文是通过以下方式创建的:

更新:

这似乎与以下内容重复:错误:pyopencl:为特定设备创建上下文