问题标签 [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.
opencl - 尽管有障碍,但打开 CL 没有同步
我刚开始通过 Python 的 PyOpenCL 接口使用 OpenCL。我试图创建一个非常简单的“循环”程序,其中每个内核中每个循环的结果取决于上一个循环周期中另一个内核的输出,但我遇到了同步问题:
主机应用程序是
结果是
如您所见,一些结果值是正确的。例如,第三个位置 = 5 = 3 + 2,但例如第二个位置是 2 = 0 + 2。因此,尽管存在障碍,但总和超过了其他线程在不同时间点的结果。我认为屏障会确保所有线程都到达它并将它们的结果写入全局内存?
这可能是非常简单的事情,我将不胜感激任何提示和评论!
PS:我正在使用 Intel SDK 在 Sandy Bridge CPU 上运行它。
opencl - 测量和最小化 OpenCL 开销
我有一个 pyopencl 程序,计算时间很长(每次运行约 3-5 小时)。我有几个内核在循环中一一启动。所以我有这样的事情:
我测量了时间,得到了以下结果:
- 系统时间为4:30小时(通过linux
time
命令测量) - 纯opencl基于事件的计时是3:30小时(加载+计算+存储)
我想知道:
- OpenCL 程序的最小开销有多大?在我的情况下,它是 35%
- 我应该相信基于事件的计时吗?
- 启用分析是否会为整个程序执行时间增加一些重要时间?
我知道开销取决于程序,而且我知道 python 不如纯 C 或 CPP 快。但我相信,当我将所有繁重的计算转移到 OpenCL 内核时,我的损失不会超过 5-7%。如果我错了,请纠正我。
PS AMD OpenCL、AMD GPU
debugging - 将 GPU 分析器(例如 CodeXL)与 PyOpenCL 一起使用
我有我的复杂 PyOpenCL 应用程序,其中包含许多缓冲区创建、内核模板等。我想在 GPU 上分析我的应用程序,看看我的情况是什么瓶颈。
是否可以在 PyOpenCl 应用程序中使用一些 gpu 分析器?例如 CodeXL。
PS 我知道事件分析,但这还不够。
memory-management - 在 OpenCL 内核中创建本地数组动态
我有一个 OpenCL 内核,它需要将一个数组处理为多个数组,其中每个子数组和保存在本地缓存数组中。
例如,想象一下 fowling 数组:
- 每个工作组都有一个数组(在示例中我们有 2 个工作组);
每个工作项处理两个数组索引(例如将值索引乘以 local_id),其中工作项结果保存在工作组共享数组中。
/li>
问题是我无法通过使用内核参数来定义缓存数组大小,但我需要为了拥有一个动态内核。
如何动态创建它?就像 c 中的 malloc 函数...
或者唯一可用的解决方案是将临时数组发送到我的内核函数?
python - 如何使用 pyopencl 将字符串列表传递给 opencl 内核?
如何以正确的方式将字符串列表传递给 opencl 内核?
我使用缓冲区尝试过这种方式(参见下面的代码),但我失败了。
OpenCL (struct.cl):
Python(opencl_struct.py):
我第一次运行程序时将“但无法输出”作为第 4 个列表元素。然后我通过增加和减少列表的元素来玩弄。最后出现了这个问题: 程序的输出应该是(短版)
(GPU) 输出:太酷了!
(GPU) 输出:这是一个列表!
(GPU)输出:一个大!
(GPU) 输出:WTF 是这样吗?
但它是:
python opencl_struct.py
INlist : ['这很酷!','这是一个列表!','一个大列表!','WTF 是这样吗?']
最大的字符串 18
len(OUT_host_buffer) 160 (GPU) output : ('这非常酷!\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ x00\x00\x00\x00\x00\x00', '这是一个列表!\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', '一个大的!\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', '但是输出失败。: -(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
(GPU) 输出:太酷了!
(GPU) 输出:这是一个列表!
(GPU)输出:一个大!
(GPU) 输出:但无法输出。:-(
如您所见,第 4 个列表元素不同。
所以,也许我的方法是错误的,或者 pyopencl 或其他地方存在错误。
我正在使用 NVidia 9400 GPU。
兰博
opencl - 如何使用pyopencl将参数传递给ocl内核?
如何传递一些参数,这些参数将在 .cl 文件中被视为使用 pyopencl 定义的预处理器?
意义:
foo.cl
转向
foo_nodefs.cl
谢谢,
约翰
python - 使用 PyOpenCL 将带有指针成员的结构传递给 OpenCL 内核
假设我有一个内核来计算两个数组的元素总和。我没有将 a、b 和 c 作为三个参数传递,而是将它们设为结构成员,如下所示:
如果您使用 PyOpenCL [1] 的 RTFM,则有关于结构的信息,其他人也已经解决了这个问题 [2] [3] [4]。但是我找不到的 OpenCL 结构示例都没有指针作为成员。
具体来说,我担心主机/设备地址空间是否匹配,以及主机/设备指针大小是否匹配。有人知道答案吗?
[1] http://documen.tician.de/pyopencl/howto.html#how-to-use-struct-types-with-pyopencl
[3] http://enja.org/2011/03/30/adventures-in-opencl-part-3-constant-memory-structs/
opencl - AMD GPU 仅在登录时可用
我在 Linux 上运行 AMD Radeon GPU,并安装了 AMD SDK for OpenCL(最新版本)。
现在,当我没有通过 GDM 登录时(当主 X 服务器没有运行时),没有可用的 AMD GPU,所以所有的计算都将由 CPU 完成。当我通过 GDM 登录时(主 x 服务器正在运行),当我在 python 中使用以下程序列出 GPU 时会出现 GPU(仅显示核心部分):
我的问题是,是否可以在不运行 X 服务器 (fglrx) 的情况下使用 AMD GPU?有没有办法做到这一点?
约翰
opencl - clSetKernelArg 返回错误代码 -49
我编写了以下 C++ 代码。在clSetKernelArg( kernel, 8, sizeof( cl_mem ), (void *) &mob_whdis );
,它返回error code -49
,我不明白为什么。其他一切正常运行。谁能帮我?
memory-management - OpenCL 矩阵平均计算优化?
我正在尝试使用 pyopenCL 计算 python 中网络摄像头流的平均值。作为一项测试,我正在尝试计算多个帧的代表性矩阵的平均值,如下所示:
然而,我的代码在我的 GPU 上似乎比在我的 CPU 上慢了 30 倍。这很可能是由于我使用了 for 循环和我缺乏工作组分配。
是否可以去掉 python for-loop 并正确分配我的工作组?