c++ - 使用 C++ 在 Xcode 6.1.1 下编译简单的 OpenCL 示例代码时出现问题

标签 c++ xcode opencl

我有一个简单的 hello world OpenCL 程序。出于某种原因,当我尝试从代码中引用内核名称时,编译器出错。

在 kernel.cl 我有

kernel void square_kernel(global float *input, global float * output, const unsigned int count)
{
    size_t i = get_global_id(0);
    if(i<count)
        output[i] = input[i] * input[i];
}

在 main.cpp 中我有:

...
#include "kernel.cl.h"
...
int main()
{
    ...
    dispatch_sync(queue, ^{
        size_t wgs;
        gcl_get_kernel_block_workgroup_info(square_kernel, CL_KERNEL_WORK_GROUP_SIZE, sizeof(wgs), &wgs, NULL);

        cl_ndrange range = {
            1, // number of dims
            {0, 0, 0}, // offset in each dim
            {DATA_SIZE, 0, 0}, // global range (total)
            {wgs, 0, 0} // local size of each work group #work_groups = DATA_SIZE  / wgs    
        };

        // call kernel
        square_kernel(&range, (cl_float *)mem_in, (cl_float *)mem_out, DATA_SIZE);

        // copy the output
        gcl_memcpy(results, mem_out, sizeof(cl_float) * DATA_SIZE);

    });
    ...
}

我在引用它的地方得到“使用未声明的标识符 square_kernel”。 cl 文件必须正在构建,因为它会生成字节代码文件。

现在我突然想到,这可能是因为我从 C++ 文件中引用它。但是,如果这是导致问题的原因,我不确定如何解决该问题。如果可以的话,我不想使用 C。有什么想法吗?

最佳答案

值得检查自动生成的 kernel.cl.h header ,以仔细检查您在这种情况下尝试调用的函数的定义。我刚刚创建了一个新的 Xcode 项目并用它构建了您的 OpenCL 内核,生成的函数定义如下所示:

extern void (^square_kernel_kernel)(const cl_ndrange *ndrange, cl_float* input, cl_float* output, cl_uint count);

注意函数名中额外的_kernel

关于c++ - 使用 C++ 在 Xcode 6.1.1 下编译简单的 OpenCL 示例代码时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27977553/

相关文章:

c++ - 友元函数在类中不可见

objective-c - 为什么 Xcode 会自动创建带下划线的变量?

基于 Java 的开源 VNC 应用程序或库

c++ - 为什么这个程序在容器中运行而不在主机上运行?

c++ - 使用C++找出文本文件中有多少行

c++ - "type"使用 C++ 的表情符号

c++ - OpenCL/C++ - 返回一个 cl::Buffer 对象

ios - 无法在具有多个开发者帐户的 Xcode 5 上添加授权

iphone - UIButton Transition - 跨屏幕运行

memory - CL_OUT_OF_RESOURCES 用于 1GB VRAM 的 200 万个 float ?