【问题标题】:OpenCL application with 3 different kernels具有 3 个不同内核的 OpenCL 应用程序
【发布时间】:2013-05-08 20:13:50
【问题描述】:

我刚开始使用 OpenCL,我想移植我在 CUDA 中的应用程序。我现在面临的问题是内核的东西。 在 CUDA 中,我将所有内核函数都放在同一个文件中,相反,OpenCL 要求读取带有内核源代码的文件,然后执行一些其他操作。

我的问题是:我能否拥有一个包含所有内核函数的文件,然后在 OpenCL 中构建程序我必须为每个内核函数创建一个文件?

如果能举个小例子就好了。

【问题讨论】:

    标签: cuda opencl


    【解决方案1】:

    OpenCL 和 CUDA 之间的唯一区别(在这方面)是 CUDA 允许在同一个源文件中混合设备和主机代码,而 OpenCL 要求您将程序源作为外部字符串加载并在运行时编译它.

    不过,将许多内核函数放入一个 OpenCL 程序,甚至放入一个 OpenCL 程序源字符串中绝对没有问题。然后使用它们各自的函数名称从程序对象中提取内核(比如 C API 内核对象)本身。

    简化 OpenCL 丑陋的 C 接口的伪代码:

    单个 OpenCL 文件:

    __kernel void a(...) {}
    __kernel void b(...) {}
    

    C 文件:

    source = read_cl_file();
    program = clCreateProgramWithSource(source);
    clBuildProgram(program);
    kernel_a = clCreateKernel(program, "a");
    kernel_b = clCreateKernel(program, "b");
    

    【讨论】:

    • 超级!我正要问如何区分内核A和B。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 2011-12-06
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多