问题标签 [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 投票
3 回答
5801 浏览

opencl - opencl 中的 CL_PLATFORM_NOT_FOUND_KHR

这是一个非常奇怪的情况。为什么我会收到错误

当我调用这个函数时:

早些时候这个错误不是。我已经安装了 Intel 和 Nvidia 的驱动程序和 SDK。有什么建议吗?

0 投票
1 回答
65 浏览

opencl - 操作系统和驱动程序如何影响 OpenCL 内核时序?

为了测量 OpenCL 内核执行时间,我们可以使用:

1- CPU 定时器.. 但我们需要考虑 OCL 函数是非阻塞的,因此我们需要使用clFinish()例程来实现全吞吐量。

2- GPU 计时器.. 使用clGetEventProfilingInfo()例程以及CL_QUEUE_PROFILING_ENABLE在任一例程的属性参数中clCreateCommandQueue()设置clSetCommandQueueProperty()标志。

操作系统和驱动程序版本如何影响用于测量内核执行时间的计时器的准确性?

我所知道的是,我们需要用至少一个内核调用来预热设备,以在一开始就吸收 OpenCL 资源分配的延迟。

0 投票
1 回答
110 浏览

c - Code terminates after saying COULD NOT CREATE KERNEL on Eclipse

I am trying to translate a sequential C code for a MJPEG decoder into OpenCL. I got the C code from this github project.

I am now trying to convert the original C code for IDCT into OpenCL.

I copied and pasted the code from the .c file for IDCT and pasted into my .cl file which I named invCosine.cl.

invCosine.cl:

I essentially copied and pasted the #define statements from original file called idct.c. I also copied and pasted the code for the kernel from the same .c file and just added the keywords __kernel, __global and cl_int to this kernel. At the moment, I do not want to write an optimized OpenCL code. I simply want to offload the IDCT computations to the GPU.

My host code in the main file is as follows:

When I run the application, I get the following output:

In order to understand why the kernel is not being detected, I removed all my idct code and copied and pasted the kernel code from this link into my .cl file:

When I ran the application again, it ran smoothly and did not produce the same error.

Why is my idct kernel not being detected?

P.S. I am using the Eclipse IDE for writing and running my code.

0 投票
0 回答
40 浏览

opencl - 占用所有GPGPU内存并为所有数据块调用内核

我需要在 GPGPU 内存允许的范围内分配尽可能多的struct Thing并为每个struct Thing调用内核。

OpenCL 不允许一次分配所有CL_DEVICE_GLOBAL_MEM_SIZE内存——每次分配最多可以分配CL_DEVICE_MAX_MEM_ALLOC_SIZE 。第二个通常比所有内存少4倍。所以我决定创建 4 个缓冲区。

此外,您不能在两个 OpenCL 内核中使用指向指针的指针,也不能在从主机向内核传递 args 时使用指针,因此不能将缓冲区数组传递给内核(因为每个缓冲区都是指向数组中第一个struct Thing的指针)。

到目前为止,我的内核代码是这样的:

这真的是唯一的方法吗?我觉得写这样的代码很愚蠢。请帮忙。

0 投票
1 回答
563 浏览

opencl - 从内核调用函数时,OpenCL 程序不构建

这个问题源于这个问题。

我有一个调用常规函数的内核。当我构建并运行我的代码时,我得到以下输出:

我的文件有问题的部分.cl如下:

idct_1D该错误是由我从内核调用的函数引起的IDCT

如何解决内核函数的错误?

有没有办法从内核调用函数?

编辑:

在遵循 pmdj 的回答后,我按以下方式编写了构建语句:

在构建并运行我的代码后,我得到了以下响应:

我检查了这个github 链接并从我的.cl文件中删除了所有评论和 printf 语句。尽管如此,在构建和运行代码后,我仍然遇到同样的错误。

编辑:

该代码反映了我在遵循 pmdj 的建议后尝试在代码中实现的更改。现在我只收到语法错误。

我现在得到的输出如下:

编辑:

我把__private函数参数放在前面,我再次收到 ptx 错误。

编辑:

代码现在可以工作了。原来我用错误的名字(idct_1d而不是idct_1D)调用了这个函数。

我的函数的标题现在如下:

0 投票
1 回答
430 浏览

c++ - OpenCL 将字符从全局复制到本地内存

我在 OpenCL 技术中实现 sha512。我对核函数有简单的定义

在主机上,我已经实现并成功测试了 sha512 算法的实现。

我在将数据从message数组复制到名为character.

循环变量在哪里i- 范围从 0 到消息的大小。

当我试图在那里运行我的程序时,我得到了这个错误

我阅读了有关async_work_group_copy()的信息,但我不明白如何使用它 - 在文档中我找不到任何示例代码。

我已经尝试过,char character = (__private char) message[i];但它也不起作用。

我不明白如何将最后一个参数传递给async_work_group_copy()以及如何使用它将数据从__global内存复制到__private内存中。

0 投票
2 回答
49 浏览

opencl - 从全局内存复制到私有内存时的值错误

我目前正在学习 OpenCL,并且我的内核在直接访问全局数组时工作得很好,但是在私有内存上使用中间值时会给出错误的结果,例如,下面代码中的aux

我想使用向量来执行这些计算,但我不明白为什么当我执行 aux = U0[index+1] 时没有将正确的值复制到私有内存中。

0 投票
1 回答
323 浏览

c++ - OpenCL 1.2 乱序执行不起作用

我正在尝试按顺序应用过滤器基本图像->过滤器1->过滤器2->读取图像。我曾经使用 CL1.1 (C),其中有事件,因此 filter2 需要等待 filter1 事件完成,而 read 需要等待 filter2 事件完成。

在 CL 1.2 (C++) 中不再是这种情况,因为它现在要求事件向量。但是我下面的代码仍然可以工作并产生正确的结果,我不明白为什么与 CL1.1 (C) 一样,这不起作用。

即使使用非阻塞调用并获得正确的输出,我也可以访问图像。是否不再需要同步?

0 投票
1 回答
606 浏览

multithreading - Opencl:两个循环之间的全局线程同步

我有一个 opencl 内核,可以在两个循环中计算两个全局缓冲区。第一个循环使用全局线程进行一些计算并将结果写入输出缓冲区“OutBuff”。然后第二个循环根据第一个循环(上一级)“OutBuff”中计算的结果更新全局缓冲区“UpdateBuff”的值。问题是两个循环之间的全局线程发生了变化,因为线程是并行执行的。但就我而言,我需要保持这两个循环之间的线程执行顺序。我需要计算具有相同全局 id 的两个循环。例如

这与使用信号量有关吗?

0 投票
1 回答
392 浏览

tensorflow - 为什么 SYCL 支持 openCL 1.2 或更高版本?

我是学生。我的问题可能很愚蠢,但我想澄清一下。我有一个带有 OpenCL 1.1 版本的 Vivante GPU 的设备。我想在 GPU 上运行支持 SYCL 的 tensorflow 示例代码。但在尝试 Tensorflow 示例代码之前,我想在 GPU 上尝试使用 openCL 1.1 的 SYCL 示例代码。

我见过几个 SYCL 实现,比如 computeCPP、triSYCL、sycl-gtx所有实现都支持 openCL 1.2 或更高版本。

有谁知道 SYCL 不支持 openCL 1.1 的原因?

尝试修改 SYCL 开源代码以支持 openCL 1.1 的可行性如何?