我希望查询OpenCL内核参数的大小,以确保向它发送一个大小正确的变量。我可以使用clGetKernelArgInfo查询每个内核参数的许多其他属性,如下所示:
clGetKernelArgInfo(k,argc,CL_KERNEL_ARG_TYPE_NAME,sizeof(argType),&argType,&retSize);
例如,这将告诉我类型的字符串名称。但是这还不够好,特别是在复杂的情况下,它是一个结构,在主机和设备上字符串名称是相同的,但是封装是不同的,所以大小不同。根据https://man.opencl.org/clGetKernelArgInfo.html的说法,我可以查询的内容是:
CL_KERNEL_ARG_ADDRESS_QUALIFIER
CL_KERNEL_ARG_ACCESS_QUALIFIER
CL_KERNEL_ARG_TYPE_NAME
CL_KERNEL_ARG_TYPE_QUALIFIER
CL_KERNEL_ARG_NAME 有什么想法吗?
FYI,这不是Get OpenCL Kernel-argument information的重复,因为这是询问如何使用参数查询函数,而不是询问如何查询参数大小。
发布于 2020-10-29 03:38:28
据我所知,在设置参数之前没有标准的检查方法,但如果大小不匹配,clSetKernelArg调用将返回CL_INVALID_ARG_SIZE,因此应该允许您相应地检测和处理错误:
CL_INVALID_ARG_SIZE如果arg_size不匹配非内存对象的参数的数据类型的大小,或者如果参数是内存对象和arg_size != sizeof(cl_mem),或者如果arg_size为0,且参数是用__local限定符声明的,或者如果该参数是一个取样器和arg_size != size of (Cl_sampler)。
https://stackoverflow.com/questions/64584454
复制相似问题