Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
代码在声明无法在Eclipse上创建内核后终止_C_Opencl_Opencl C - Fatal编程技术网

代码在声明无法在Eclipse上创建内核后终止

代码在声明无法在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代码,并将内核代码从

我正在尝试将MJPEG解码器的顺序C代码翻译成OpenCL。我从github项目获得了C代码

我现在正在尝试将IDCT的原始C代码转换为OpenCL

我从IDCT的.c文件中复制并粘贴了代码,并粘贴到我的.cl文件中,我将其命名为invCosine.cl

invCosine.cl:

运行应用程序时,我得到以下输出:

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];
}