问题标签 [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.
c - 纯 C OpenCL 与 Python OpenCL 性能
我正在寻找 Python 包装器到 OpenCL 和 Pure C OpenCL 之间的性能测量。性能测量会随时间、内存等而变化。 - 是否有可用的基准?- 对时间性能差异的期望是什么?- 什么样的任务(当然是并行的......)应该有所作为?
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,这可行,但是还有其他方法吗?
python - pyOpenCL 和 opencl4py 的区别
今天我偶然发现了stackoverflow中的一篇文章(另请参见此处):
我们正在开发opencl4py,更高级别的绑定。这个项目使用 CFFI,所以它适用于 Pypy。
我们在使用 pyopencl 时遇到的主要问题是“import pyopencl”会执行 OpenCL 初始化,并在 NVIDIA 驱动程序的情况下占用整个虚拟内存,从而阻止正确的分叉并有效地禁用多处理(是的,我们声称使用 pyopencl 至少在 NVIDIA 上会禁用多处理)。opencl4py 使用惰性 OpenCL 初始化,解决了这个“导入地狱”。
后来,它获得了一些不错的功能,例如超级简单的二进制程序缓存等。不幸的是,文档有点简短。了解其工作原理的最佳方法是通过测试。
由于还有 pyOpenCL,我很想知道这两个包之间的区别是什么。有人知道我在哪里可以找到这两个软件包的优缺点概述吗?
编辑:包括 benshope 的评论,因为我也会感兴趣:“禁用 [s] 多处理”是什么意思?就像,它不能一次在多台设备上运行内核?
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
,gcc
和dllwrap
版本。
我已经尝试了很多东西,比如安装 .NET 和 boost,以及其他晦涩难懂的东西。我真的不知道该怎么办。我跑了“取决于”,但它显然不适用于 Windows 7 64 位。我也无法让 pycuda 工作,它会吐出几乎相同的错误消息。cuda 也可以正常工作。在这种情况下也可能是错误的版本,或者因为它们都是姐妹项目,所以作者还有一些我不知道的其他常见依赖项。
我用谷歌搜索了很多,似乎找不到解决方案。任何帮助表示赞赏。
numpy - 在numpy中获取页面对齐内存
有没有办法array
在页面边界上分配 numpy 的数据部分(即数据)?
对于我关心的原因,如果我在 Intel 设备上使用 PyOpenCL,并且我想使用创建缓冲区CL_MEM_USE_HOST_PTR
,他们建议数据是 1)页面对齐和 2)大小为缓存行的倍数。
C 中有多种分配页面对齐内存的方法,例如:aligned malloc() in GCC?
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
包现在抛出一个错误。
python - AttributeError:“CommandQueue”对象没有属性“dtype”
我正在尝试用 pyFFT 计算 FFT。但是下面的代码会导致错误。
ref_input 的类型为:
调试输出:
事实上我找不到'dtype'。但为什么?
python - “GLXPlatform”对象没有属性“WGL”
我是 OpenGL/OpenCL 的初学者。我正在尝试执行此 示例中的代码,但出现错误:
据我了解,WGL 是适用于 Windows 操作系统而不是 Linux 的 API。我之前应该以某种方式指定我的平台吗?或者我该如何解决这个问题?
提前致谢!
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_buf
为0
,然后在 OpenCL 中运行计算,该计算将在大迭代中设置其值。之后我尝试从设备内存中收集这个值,但这就是出错的地方:
最后一行给了我:
这种重复分配如何导致错误?
更重要的是:如何避免?
我知道这个问题可能与平台有关,因此可能难以重现。但这是我唯一可以访问的机器,所以代码应该可以在这台机器上运行。
免责声明:我以前从未使用过 OpenCL(或 CUDA)。我在 GPU 不支持 OpenCL 的机器上编写代码。我总是在 CPU 上测试它。现在我切换到 GPU,我发现错误不会持续发生令人沮丧,我不知道为什么。
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:为特定设备创建上下文