问题标签 [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.
python - 如何在 pyopencl 中创建可变大小的 __local 内存?
在我的 C OpenCL 代码中,我clSetKernelArg
用来创建__local
用于我的内核的“可变大小”内存,这在 OpenCL 本身中不可用。看我的例子:
我现在的问题是,如何在 pyopencl 中做同样的事情?
我查看了 pyopencl 附带的示例,但我唯一能找到的是一种使用模板的方法,在我看来,这似乎是一种矫枉过正的做法。见例子。
你有什么建议吗?
python - 使用 PyOpenCL 进行结构对齐
更新:int4
我的内核中的错误。
我正在使用 pyopencl 但无法使结构对齐正常工作。在下面的代码中,两次调用内核,该b
值被正确返回(如 1),但该c
值具有一些“随机”值。
换句话说:我正在尝试读取结构的两个成员。我能读第一个但不能读第二个。为什么?
无论我使用 numpy 结构化数组还是使用 struct 打包,都会出现同样的问题。评论中的_-attribute__
设置也无济于事。
我怀疑我在代码的其他地方做了一些愚蠢的事情,但看不到它。任何帮助表示赞赏。
输出(我必须在剪切+粘贴时重新格式化,所以可能稍微弄乱了换行符;我还添加了注释,说明各种打印值是什么):
coding-style - 如何构建大型 OpenCL 内核?
我曾在几个项目中使用 OpenCL,但始终将内核编写为一个(有时相当大)函数。现在我正在处理一个更复杂的项目,并希望在多个内核之间共享功能。
但是我能找到的示例都将内核显示为单个文件(很少有人调用辅助函数)。似乎应该可以使用多个文件 -clCreateProgramWithSource()
接受多个字符串(并组合它们,我假设) - 尽管 pyopenclProgram()
只需要一个源。
所以我想听听任何有这样做经验的人的意见:
- 是否存在与多个源文件相关的问题?
- pyopencl 是简单地连接文件的最佳解决方法吗?
- 有没有办法编译函数库(而不是在每个内核中传递库源,即使不是全部都使用)?
- 如果每次都需要传入库源,是否会丢弃未使用的函数(无开销)?
- 还有其他最佳实践/建议吗?
谢谢。
python - 如何将 C++ 图结构转换为 Python/Numpy 图结构?
免责声明:本文作者对 C++ 和 Python 的了解有限,对 Java 和 Ruby 有足够的了解。
“OpenCL 编程指南”一书中的一个示例使用以下 OpenCL 自定义图形数据结构,以便 Dijkstra 算法在 OpenCL 设备上运行:
此数据结构基于 Pawan Harish 和 PJ Narayanan 撰写的“使用 CUDA 在 GPU 上加速大型图形算法”一文中的示例。
基本上,它有三个数组:一个顶点数组V
,每个顶点指向它在边数组中的相邻顶点E
(一个顶点i+1
的相邻顶点i
紧跟在数组中的该顶点的相邻顶点E
)。第三个数组用于边缘权重(还有两个更具体的 OpenCL 相关数组)。
如何在 Python/Numpy 中表示这个数据结构?我想在 PyOpenCL 中使用它。
python - PyOpenCL vs Clyther vs 纯 OpenCL 和 C99:什么对新手最好?
我有一个问题:快速线性系统求解(我有很多这样的系统)。我将使用 GPU 和 OpenCL 解决它。
我喜欢动态语言,例如 Ruby 或 Python,并且我已经摆脱了使用 C 等低级语言的习惯。
所以我有两个同时的目标:
- 开发这样的 OpenCL 解决方案,以尽可能少的努力尽可能快地求解线性系统。
- 不要在性能上损失太多。我不想为了方便而支付 2-10 倍的减速,但我准备为使用高级语言的工作支付 30-50%。
对我来说最好的情况是:几乎在 OpenCL C 中编译 python 代码几乎没有浪费。
我找到了这样的解决方案:pure OpenCL C、PyOpenCL、Clyther。
我应该从什么开始?
python - PyOpenCL - '构建成功,但导致非空日志'
我刚开始使用 PyOpenCL 和一般的 OpenCL(来自 CUDA)。事情是,当我使用这个非常简单的虚拟内核时:
我在构建步骤得到了这个:
C:\Python27\lib\site-packages\pyopencl\cache.py:338:用户警告:构建成功,但导致非空日志:在 pyopencl.Device ' Intel(R) Core(TM) i5-2410M CPU 上构建@ 2.30GHzC:\Python27\lib\site-packages\pyopencl__init__.py:173:用户警告:构建成功,但导致非空日志:在 pyopencl.Device ' Intel(R) Core(TM) i5-2410M CPU 上构建@ 2.30GHz
在这里我什至没有返回我的解释器命令提示符,我必须按 Enter 键才能返回到提示符。我想应该有一些实际的信息,但我无法让它显示出来。顺便说一句,内核运行良好,所以没有问题。这很烦人。任何想法这可能是什么?
opencl - 这个 OpenCL 代码可以优化吗?
我正在为一个专门的矩阵函数编写一段 OpencL 代码:对于一个Dx1
向量v
、两个DxD
矩阵A
和B
一个常数c
,返回1xD
向量r
在哪里r[i] = c * sum_over_j (v[j] * A[i][j] * B[i][j])
以下是我到目前为止的内容,但运行速度非常慢。没有求和但返回DxD
矩阵的版本大约快十倍。如果这有什么不同,它会从 PyOpenCL 中调用。
有什么做错了吗?可以优化吗?
干杯!
wait - PyOpenCL:Event.wait() 有什么用?
PyOpenCL 文档中未注释此函数:http ://documen.tician.de/pyopencl/runtime.html?highlight=enqueue#pyopencl.Event.wait
我的问题是:我必须在 for 循环中调用内核,并在每次调用后将复制操作与pyopencl.enqueue_copy_buffer(dest, src, size)
. 首先,我使用.wait()
附加的 (ie pyopencl.enqueue_copy_buffer(dest, src, size).wait()
) 执行此操作,因为我在示例中找到了这一点。然后我删除.wait()
并获得了非常显着的加速。
那么这个功能有什么用,在什么情况下可以放弃呢?谢谢。
python - OpenCL:内核永远挂起,除非我删除参数
这是 OpenCL 1.1 ,使用英特尔 SDK (1.5 x64)。PyOpenCL 2011.2。我在 Linux (Fedora) 上。
下面的代码打印"DERP1"
,但没有别的。
它打印"DERP1"
然后继续工作。
但是,如果我删除第一个或第二个参数(即board
or board_size
),程序会停止并按[1]
我的预期打印。
到底是怎么回事?我如何按照我的意思进行这项工作?
编辑: top
持续报告超过 350% 的 CPU 使用率。如果我将 global_size 从board.shape
(ie (10, 24)
) 替换为(1,)
(ie only one task in a dimension),那么我得到大约 100% 的 CPU 使用率。对我来说,这表明这一项任务一直在不停地忙循环运行,但我不知道为什么。对于这个任务,与 10*24 任务一样,如果我删除第一个或第二个参数,它就会停止。
edit2: : 我很确定这是 PyOpenCL 的问题吗?我尽可能地将示例移植到 C 中,其结果可以在此处找到,但 C 示例没有挂起。谁能发现一些差异或找出问题所在?
opencl - clGetDeviceIDs 在 OpenCL 中失败,错误代码为 -30
以下程序在我的机器上使用 ATI Firepro V8750 的输出如下:
(这发生在调用第一个 clGetDeviceIDs 时)。返回的错误代码是-30。这意味着什么?
我无法理解为什么它无法找到该设备。我检查了 CLinfo.exe 列出了我的 GPU 以及我拥有的 Intel CPU。有人可以给我一些关于这里有什么问题的指示吗?
附加信息:
AMD 应用程序 SK 2.4
Firepro 驱动程序:8.911.3.3_VistaWin7_X32X64_135673
12-4_vista_win7_32_dd_ccc
Windows 7 另外我必须提到 firePro 驱动程序的一些组件无法安装。
这是 CLINFO 输出:GPU:
中央处理器:
为什么两个突出显示的版本不同?