如何解决如何查询OpenCL内核参数的大小?
我想查询OpenCL内核参数的大小,以便确保向其发送正确大小的变量。我可以使用clGetKernelArgInfo查询每个内核参数的许多其他属性,如下所示:
clGetKernelArgInfo(k,argc,CL_KERNEL_ARG_TYPE_NAME,sizeof(argType),&argType,&retSize);
例如,这将告诉我类型的字符串名称。但这还不够好,尤其是在复杂的情况下,它是一个结构,并且主机和设备上的字符串名称相同,但是包装不同,因此大小也不同。根据{{3}},我可以查询的内容是:
CL_KERNEL_ARG_ADDRESS_QUALIFIER
CL_KERNEL_ARG_ACCESS_QUALIFIER
CL_KERNEL_ARG_TYPE_NAME
CL_KERNEL_ARG_TYPE_QUALIFIER
CL_KERNEL_ARG_NAME
有什么想法吗?
仅供参考,这不是https://man.opencl.org/clGetKernelArgInfo.html的重复,因为这是在询问如何使用参数查询功能,而不是在询问如何查询参数大小。
解决方法
据我所知,在设置参数之前,没有标准的检查方法,但是如果大小不正确,clSetKernelArg
调用将返回CL_INVALID_ARG_SIZE
,因此应该可以检测并相应地处理错误:
CL_INVALID_ARG_SIZE,如果arg_size与非内存对象的参数的数据类型的大小不匹配,或者该参数是内存对象且arg_size!= sizeof(cl_mem),或者arg_size为零且声明了参数使用__local限定符,或者参数为采样器且arg_size!= sizeof(cl_sampler)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。