在OpenCL中函数需要打包为内核数据结构。内核可以被发送到命令队列中,然后在发送到设备上。
内核用cl_kernel数据结构表示。有两个函数可以创建内核:clCreateKernelsInProgram和clCreateKernel。
函数原型如下:
clCreateKernelsInProgram(cl_program program, cl_uint num_kernels, cl_kernel *kernels, cl_uint *num_kernels_ret);
clCreateKernel(cl_program program, const char *kernel_name, cl_int *error);
clCreateKernelsInProgram为程序中的每个函数创建内核,所有的cl_kernels结构放在kernels数组中。
clCreateKernel用于创建单个内核,需要知道创建内核所在的函数名。如果需要创建多个内核,则需要反复调用clCreateKernel。
cl_kernel *kernels, found_kernel;
char kernel_name[20];
cl_uint num_kernels;
err = clCreateKernelsInProgram(program, 0, NULL, &num_kernels);
if (err < 0)
{
cout << "Failed to find any kernels." << err << endl;
return err;
}
kernels = (cl_kernel *)malloc(num_kernels * sizeof(cl_kernel));
err =clCreateKernelsInProgram(program, num_kernels, kernels, NULL);
if (err < 0)
{
cout << "Failed to create kernels." << err << endl;
return err;
}