Cuda 具有3种不同内核的OpenCL应用程序

Cuda 具有3种不同内核的OpenCL应用程序,cuda,opencl,Cuda,Opencl,我刚开始使用OpenCL,我想在CUDA中移植一个应用程序。我现在面临的问题是内核。 在CUDA中,我的所有内核函数都在同一个文件中,相反,OpenCL要求读取包含内核源代码的文件,然后执行其他操作 我的问题是:我可以有一个包含所有内核函数的文件,然后在OpenCL中构建程序吗 如果你能举个小例子就好了。OpenCL和CUDA(在这方面)的唯一区别是CUDA允许在同一个源文件中混合设备和主机代码,而OpenCL要求你将程序源作为外部字符串加载并在运行时编译 但无论如何,将许多内核函数放入单个Op

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

我的问题是:我可以有一个包含所有内核函数的文件,然后在OpenCL中构建程序吗


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

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。