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

有四种情况返回左值
(1)在某arg的数据类型非cl_mem成员时,且arg_size ≠ sizeof(该实际数据类型);

(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。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值