【问题标题】:OpenCL Kernel code compile error - Visual Studio 2019OpenCL 内核代码编译错误 - Visual Studio 2019
【发布时间】:2023-04-07 20:46:01
【问题描述】:

我是 OpenCL 编程的新手,我正在尝试在 VS 2019 中运行一个简单的向量加法代码。但是,我无法编译 .cl 代码。尝试构建程序时显示以下 6 个错误:

Error C2144 语法错误:'void' 应该以';'开头

错误 C4430 缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int

错误 C2065 '__global':未声明的标识符

错误 C2146 语法错误:在标识符 'float4' 之前缺少 ')'

错误 C2143 语法错误:缺少 ';'在'{'

之前

错误 C2447 '{':缺少函数头(旧式正式列表?)

这是我的内核代码:

__kernel void add_numbers(__global float4* data,
    __local float* local_result, __global float* group_result) {

    float sum;
    float4 input1, input2, sum_vector;
    uint global_addr, local_addr;

    global_addr = get_global_id(0) * 2;
    input1 = data[global_addr];
    input2 = data[global_addr + 1];
    sum_vector = input1 + input2;

    local_addr = get_local_id(0);
    local_result[local_addr] = sum_vector.s0 + sum_vector.s1 +
        sum_vector.s2 + sum_vector.s3;
    barrier(CLK_LOCAL_MEM_FENCE);

    if (get_local_id(0) == 0) {
        sum = 0.0f;
        for (int i = 0; i < get_local_size(0); i++) {
            sum += local_result[i];
        }
        group_result[get_group_id(0)] = sum;
    }
}

我已经添加了 include 和 lib 目录并正确链接了它们。谷歌搜索后,我找不到很多解决此错误的方法。请帮帮我...

更新:我修复了它

大家好, 我找到了解决这个问题的方法。我从 VS 项目中删除了 .cl 文件,然后重新添加了它(可选)。我还将文件打开选项更改为具有“rb”而不是“r”( fopen(filename,"rb") )。现在我可以运行它了!

【问题讨论】:

    标签: opencl


    【解决方案1】:

    您的问题是 C++ 编译器想要编译 OpenCL 代码。您可以从 VS 项目中排除该文件并在运行时使用fstream 读取它以获取内核代码字符串,或者您可以通过字符串化宏将内核代码字符串嵌入到可执行文件中:

    #include <string>
    #define R(...) string(" "#__VA_ARGS__" ")
    string get_opencl_code() { return R(
    
    // put your OpenCL C code here
    
    );}
    

    【讨论】:

    • 哦,我现在明白了。谢谢你:)
    猜你喜欢
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 2013-06-03
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多