问题标签 [opencl-c]

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 投票
1 回答
58 浏览

c - OpenCL:clBuildProgram 失败,没有日志

我想要完成的事情:
我正在尝试在 OpenCL 中渲染一些东西并将其写入 OpenGL 帧缓冲区(因为它是我可以通过渲染缓冲区等获得的唯一帧缓冲区,但我很乐意接受我可以使用的任何其他帧缓冲区 - 你告诉我使用 glsl 着色器对我没有帮助)

问题:
正如标题所说,OpenCL 函数clBuildProgram失败并出现错误 -11 (CL_​BUILD_​PROGRAM_​FAILURE)。这不是问题,但 CL 编译器的日志是空的。我仔细检查了我的日志代码,但应该没问题。我还是把它贴在下面,只是为了让你看到自己。

我试图解决的问题:

  • 谷歌搜索,当然
  • 阅读来自 Khronos Groups 的文档
  • 检查我的设备是否支持“cl_khr_gl_sharing”扩展,它确实支持(它包含在从返回的字符串中clGetDeviceInfo(device_id, CL_DEVICE_EXTENSIONS, retSize, extensions, &retSize);
  • 修改着色器/内核:
  • 犯了一些故意的错误,看看日志代码是否真的有效(它确实有效)
  • 并缩小着色器/内核,看看着色器中的某些东西是否不能正常工作(正如我所读到的,一些缺失的东西会使 cl 的编译器崩溃)

我发现:
从我尝试的最后一点,我注意到,write_imageuiread_imageuiopencl 函数使编译器无法编译我的代码(这就是我检查“cl_khr_gl_sharing”扩展名的原因)

此外:
我的操作系统是 Windows 10,我使用的 C 编译器是 GCC(我不知道,这有什么帮助,因为主机程序编译得很好,但这里仍然如此)

一些代码:
着色器/内核(尽可能缩小以重现问题,我也希望对你有用;我认为最后两行调用是导致 opencl 编译器无法工作的原因;其他东西在那里,让它是一个着色器,一旦它工作,它实际上可以处理某些东西):

最小化调用代码 (C),它执行所有必要的初始化工作(注意:日志缓冲区是动态可更改的):

您可能对输出感兴趣(最后两行是由于未构建内核引起的。该程序可以从源代码制作 - 查看代码):

其他人有类似的问题吗?任何想法,我应该怎么做?可能有 cl 内核/着色器的标题,我需要包含在其中吗?我的 clBuildProgram 调用可能不正确?(我读到有人没有通过设备,所以我的代码中可能缺少其他东西)

如果您需要更多详细信息,请务必告诉我,以便我提供(我想不出您现在可能需要的任何其他信息)

在此先感谢您的时间!

编辑:
根据规范,设备需要支持CL_​DEVICE_​IMAGE_​SUPPORT扩展,它确实

我用这个检查了它:

哪个输出:

又名。CL_TRUE

编辑 2:
事实证明,需要在内核中启用 OpenCL 扩展:https
: //www.khronos.org/registry/OpenCL/sdk/2.2/docs/man/html/EXTENSION.html#pragma OPENCL EXTENSION all : enable在第一行添加内核/着色器确实会导致相同的问题

编辑 3:
从内核映像参数中删除 __read_write 标志或将其替换为其他内容(如 __read_only)会导致 OpenCL 编译器崩溃或无限循环,因为 clBuildProgram 永远不会返回(或者会在很长一段时间内返回)

0 投票
1 回答
15 浏览

opencl - 检索以特定结果结尾的 opencl 内核程序的数量

我的目标是获得一些内核,它的计算满足一个条件。条件可能是value == 0

我试图找到一些内置的信号量函数来完成此任务,但我找不到任何适用于 OpenCL 的函数。我不想将结果 blit 到 CPU 内存中,因为这会有点低效。

我尝试或想象的另一件事是使用错误使某些内核崩溃,然后使用一些调试代码来检索崩溃内核的数量。然后我可以编写类似的东西1/value,每个内核,只要满足我的条件就会崩溃。不幸的是,我找不到这样的 OpenCL(调试)功能来检索此信息。
我想,这种方法可能比使用信号量的方法慢一些,因为它可能会触发一些后备/清理代码。

进一步的限制是,主机上的代码只能为此使用 OpenCL 标头。

有什么想法可以在不涉及 CPU 的情况下检索多个满足条件的内核吗?

0 投票
1 回答
46 浏览

c++ - CL/cl.hpp:没有这样的文件或目录 | 英伟达 GeForce

下午好!我正在尝试在具有以下行的C++中运行代码:

但是启动程序会出现这个错误:

我试图做什么?

  1. 完全重新安装mingw64
  2. 卸载Visual Studio 2019并安装Visual Studio 2022
  3. 根据说明 安装了NVIDIA Cuda (我还更新了 NVIDIA 驱动程序): https ://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html

Cuda 已全面运行。我检查了 CUDA 附带的代码示例。

PS 据我所知,OpenCl 是 CUDA 的一部分。

谢谢!

0 投票
1 回答
42 浏览

c++ - OpenCL 不运行程序

下午好!我需要运行一个用 C++ 编写的使用 OpenCL 的程序。在此之前,我启用了 OpenCL 头文件,安装了 CUDA(这是可选的)并重新安装了 Visual Studio 和 MinGW。我有一个 NVIDIA GeForce 1080。

好吧,我有一个array<int, 3> loc,由于执行结果loc应该根据 kernelFile2.cl 更改为15、15、15(找到的是 loc,检查主代码):

抱歉,我对 OpenCL 不太了解,所以我将向您展示整个程序。

文件.cpp:

但是,不幸的是,这个程序并没有改变变量。

一开始它看起来不同,但我改变了它,只留下了有助于理解问题的东西。

如果有人帮助,非常感谢!

0 投票
1 回答
75 浏览

c++ - OpenCL C++ HelloWorld

下午好!我正在本教程中学习 OpenCL C++:单击(不是必需的)

该视频使用CL API版本1.2 ,因此我从该回复中的链接下载了OpenCL 1.2标头: https ://stackoverflow.com/a/57017982/11968932

Visual Studio 2022未显示任何错误,但程序会输出以下符号:

应该"Hello World!"

这是程序本身。主持人:

HelloWorld.cl:

谢谢 ;)

0 投票
0 回答
14 浏览

opencl - Opencl clGetDeviceIDs(platform, CL_DEVICE_TYPE_CPU, 0, NULL, &num_devices) 返回 -1

我正在使用英特尔 OpenCL SDK。上个月,当我尝试在系统中存在的 CPU 上运行我的 opencl 代码时,通过 clGetDeviceIDs(platform, CL_DEVICE_TYPE_CPU , 0, NULL, &num_devices),它工作了......它检测到的总平台数是 2。一个是 Intel GPU另一个是英特尔 CPU。我只需更改宏 CL_DEVICE_TYPE_CPU 即可在英特尔 GPU 和 CPU 上运行代码。但是现在当我尝试检测同一系统上的平台和设备时,它没有检测到 CPU。它将可用平台显示为 1 ,即 Intel GPU。所以,当clGetDeviceIDs(platform, CL_DEVICE_TYPE_CPU, 0, NULL,&num_devices); 被称为它返回-1(CL_DEVICE_NOT_FOUND)并且程序正在退出。

谁能帮我解决这个问题,为什么在同一系统上没有检测到 CPU,当我们有可用的英特尔 CPU 时。但是使用宏 CL_DEVICE_TYPE_GPU 可以正确检测到 GPU。谢谢。

0 投票
0 回答
9 浏览

opencl - 是否有任何公共 OpenCL C 库?

标题说明了一切,但更清楚的是:我正在寻找 OpenCL C(内核)代码的库/集合,而不是使用/提供 OpenCL 接口的库。此外,我的兴趣不仅限于特定的用例。因此,这个问题故意含糊不清。理想情况下,答案提供名称、描述和指向提供有用 OpenCL C 代码片段的项目的链接。