对于以下内核,我首先使用clCreateBuffer分配OpenCL内存缓冲区。然后,我使用clSetKernelArg并将argsize设置为sizeof(cl_mem)。
float ExampleKernel (__global unsigned char* arg1)
{
// some code
}
我的问题是,即使内核的参数是指向unsigned char的指针,为什么我需要将argsize设置为sizeof(cl_mem)?是因为OpenCL数据总是以cl_mem格式(每个元素的sizeof(cl_mem))分配?当调用内核时,对各个参数类型的动态类型转换由OpenCL?
处理答案 0 :(得分:2)
内核的参数是unsigned char类型的 not :它是包含无符号字符的全局内存的指针。这些缓冲区在主机端表示的方式恰好是cl_mem
类型。在内核方面,它们由global
指针代表。