本文主要是介绍OpenCL 函数clSetKernelArg()返回错误值CL_INVALID_ARG_SIZE分析和理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
OpenCL Spec网址:
The OpenCL™ Specification (khronos.org)
根据spec中查询到函数clSetKernelArg()返回错误值CL_INVALID_ARG_SIZE定义如下,下面展开分析。
1. clSetKernelArg()函数原型如下
cl_int clSetKernelArg(cl_kernel kernel,cl_uint arg_index,size_t arg_size,const void* arg_value);
用于设置内核对象的参数(参数,Arguments,缩写Arg)。
2. 输入如下
名字 | 含义 |
kernel | 要设置的内核对象。内核对象可以理解为一个任务的kernel函数。 |
arg_index | 参数在 kernel 函数中的索引。参数索引从0开始计数,即第一个参数的索引为0,第二个参数的索引为1,以此类推。 |
arg_size | 参数值的大小,以字节为单位。如果参数是内存对象(如缓冲区或图像),则应设置为 sizeof(cl_mem) 。对于其他类型的参数(如基本数据类型),可设置为相应的大小。 |
arg_value | 指向参数值的指针。根据参数的类型,需要传递相应类型的指针,如 cl_mem 类型对应的是 cl_mem* 。 |
3. spec规定的返回值如下
返回值 | 含义 |
CL_SUCCESS | 该函数成功执行时返回左值 |
CL_INVALID_ARG_SIZE | 有四种情况返回左值 (2)在某arg的数据类型是cl_mem成员时,且arg_size ≠ sizof(mem); (3)arg_size = 0且arg使用了本地限定符声明_local; (4)在arg是一个sampler时,且arg_size ≠ sizeof(sampler)。 |
…… | …… |
4. 简单理解
3的(1)、(2)、(3)可以不严谨地理解为,只要sizeof(arg)≠ sizeof(实际数据类型),就返回错误码CL_INVALID_ARG_SIZE。
这篇关于OpenCL 函数clSetKernelArg()返回错误值CL_INVALID_ARG_SIZE分析和理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!