OpenCL应用程序有3个不同的内核

时间:2013-05-14 13:49:27

标签: cuda opencl

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

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

如果你举一个例子,那就太好了。

1 个答案:

答案 0 :(得分: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");