【问题标题】:OpenCL kernel definition error clBuildProgram(CL_BUILD_PROGRAM_FAILURE)?OpenCL 内核定义错误 clBuildProgram(CL_BUILD_PROGRAM_FAILURE)?
【发布时间】:2020-02-04 18:21:04
【问题描述】:

运行一个 openCl 应用程序它给了我这个错误:

ERROR: clBuildProgram(CL_BUILD_PROGRAM_FAILURE)

这是内核定义, 一个错误是在 log2 函数中,

另一个错误在char* bits = &(char_array[64*(n/m)*(index-1)+it*64]);

另一个错误在max[it] = *count

最后一个错误在if(max[i] > *result){*result = max[i];}

你能告诉我如何更正定义吗?谢谢

__kernel void vadd(
    __global char* char_array,
    int m,
    int n,
    __global long* result)
{ 

    int index = get_global_id(0);
    int max_n = n/m;
    if(index == m-1){
        max_n = n - (n/m)*(m-1);
    }

    int max[ max_n ];
    int offset = log2(m);
    for (int it=0; it < max_n; it++)
    {
        char* bits = &(char_array[64*(n/m)*(index-1)+it*64]);
        int count=0;
        for(int i=offset; i<=64; i++)
        {
            if(bits[i]=='0'){
                count++;
            }else{break;}
        }
        max[it] = count;
    }

    *result = 0;
    for(int i=0; i<max_n;i++)
    {
        if(max[i] > *result){*result = max[i];}
    }
    *result = *result +1;
}

【问题讨论】:

  • 您能简单地引用整个构建日志吗?错误消息将为我们节省大量时间来尝试找出不正确的地方。
  • }catch (cl::Error err) { std::cout
  • 可以通过CL_PROGRAM_BUILD_LOGclGetProgramBuildInfo查询得到详细的编译日志。

标签: c opencl


【解决方案1】:

这一行有一个错误:

char* bits = &(char_array[64*(n/m)*(index-1)+it*64]);

char* bits在声明局部变量时实际上意味着__private char*,而char_array被定义为__global char*。您需要确保 bits 使用相同的类型。

其他的对我来说不是很明显,但我建议您将完整的内核构建输出添加到您的问题中,因为这将有助于缩小范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多