代码在声明无法在Eclipse上创建内核后终止
我正在尝试将MJPEG解码器的顺序C代码翻译成OpenCL。我从github项目获得了C代码 我现在正在尝试将IDCT的原始C代码转换为OpenCL 我从IDCT的.c文件中复制并粘贴了代码,并粘贴到我的.cl文件中,我将其命名为invCosine.cl invCosine.cl: 运行应用程序时,我得到以下输出:代码在声明无法在Eclipse上创建内核后终止,c,opencl,opencl-c,C,Opencl,Opencl C,我正在尝试将MJPEG解码器的顺序C代码翻译成OpenCL。我从github项目获得了C代码 我现在正在尝试将IDCT的原始C代码转换为OpenCL 我从IDCT的.c文件中复制并粘贴了代码,并粘贴到我的.cl文件中,我将其命名为invCosine.cl invCosine.cl: 运行应用程序时,我得到以下输出: Number of devices: 2 -----COULD NOT CREATE KERNEL!!--- 为了理解内核未被检测到的原因,我删除了所有idct代码,并将内核代码从
Number of devices: 2
-----COULD NOT CREATE KERNEL!!---
为了理解内核未被检测到的原因,我删除了所有idct代码,并将内核代码从link复制并粘贴到我的.cl文件中:
__kernel void taskParallelAdd(__global float* A, __global float* B, __global float* C)
{
int base = 0;
C[base+0] = A[base+0] + B[base+0];
C[base+4] = A[base+4] + B[base+4];
C[base+8] = A[base+8] + B[base+8];
C[base+12] = A[base+12] + B[base+12];
}
当我再次运行应用程序时,它运行平稳,没有产生相同的错误
为什么我的idct内核没有被检测到
另外,我正在使用EclipseIDE编写和运行代码。出现内核错误的原因是,您实际上没有在clBuildProgram调用中检查错误代码。如果运行ret=clBuildProgramprogram,1,&device\u id,NULL,NULL;相反,您将在clBuildProgram调用中得到一个错误
出现该错误的原因是,OpenCLC语言没有cl_int数据类型。这意味着您不能在内核中使用它。cl_*类型用于主机端使用。在像您这样的.cl文件中,您需要使用常规类型,如int、float、char等
假设您提供的代码具有but和rot宏的所有必要定义,将内核更改为使用int而不是cl_int应该可以解决您的问题。您不是在测试clBuildProgram的返回值。我怀疑它可能失败了,通过clGetProgramBuildInfo检索到的错误消息可能会揭示问题。
Number of devices: 2
-----COULD NOT CREATE KERNEL!!---
__kernel void taskParallelAdd(__global float* A, __global float* B, __global float* C)
{
int base = 0;
C[base+0] = A[base+0] + B[base+0];
C[base+4] = A[base+4] + B[base+4];
C[base+8] = A[base+8] + B[base+8];
C[base+12] = A[base+12] + B[base+12];
}