0

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

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

举个小例子就好了。

4

1 回答 1

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");
于 2013-05-14T14:11:21.447 回答