我刚开始使用OpenCL,我想要移植我在CUDA中的应用程序。我现在面临的问题是核心内容。 在CUDA中,我将所有内核函数放在同一个文件中,相反,OpenCL要求使用内核源代码读取文件,然后执行其他操作。
我的问题是:我可以拥有一个包含所有内核函数的单个文件,然后在OpenCL中构建程序 OR 我的每个内核函数都必须有一个文件?
如果你举一个例子,那就太好了。
答案 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");