首页 > 软件开发 > 其他综合 > 正文
3.6.3 查询和管理内核对象
2015-12-07 15:24:49     我来说两句      
收藏    我要投稿

一旦创建了内核对象,开发人员如果想知道内核对象的一些属性信息,可以使用如下函数查询内核对象的属性信息:

cl_int clGetKernelInfo(cl_kernel kernel,
                       cl_kernel_info param_name,
                       size_t param_value_size,
                       void *param_value,
                       size_t *param_value_size_ret)

参数param_name为查询内核对象的属性名称,可接受的参数见表3-12。参数param_value为存储结果的位置指针。参数param_value_size为参数param_value的字节数。参数param_value_size_ret为实际写入的字节数。


 

函数clGetKernelInfo()不能查询特定于某个设备的内核对象的信息。例如,如果想知道如何将一个并行负载分派到执行内核的多个不同设备上,那该如何处理呢?在OpenCL中提供了如下函数可以查询特定于某个设备的内核对象属性信息:

cl_int clGetKernelWorkGroupInfo(cl_kernel kernel,
                                cl_device_id device,
                                cl_kernel_work_group_info param_name,
                                size_t param_value_size,
                                void *param_value,
                                size_t *param_value_size_ret)

参数device为内核对象关联的设备列表中的一个特定设备。参数param_name为查询内核工作组信息的属性名称,可接受的参数见表3-13。其他参数与clGetKernelInfo()意义一样,在此就不赘述。


 


除了可以查询内核对象的属性信息,还可以查询内核函数参数信息。OpenCL提供如下函数来实现对内核函数参数属性查询:

cl_int clGetKernelArgInfo(cl_kernel kernel,
                          cl_uint arg_index,
                          cl_kernel_arg_info param_name,
                          size_t param_value_size,
                          void *param_value,
                          size_t *param_value_size_ret)

参数arg_index为参数索引。参数param_name为查询内核函数参数的属性名称,可接受的参数见表3?14。其他参数与clGetKernelInfo()意义一样,在此就不赘述。


 

下面的例子展示了如何使用上述三个函数来查询有关的属性信息:

……
size_t size;
char *KernelName;
char *ArgName;
clGetKernelInfo(kernel, CL_KERNEL_FUNCTION_NAME, 0, NULL, &size);
KernelName = (char *)malloc(size);
clGetKernelInfo(kernel, CL_KERNEL_FUNCTION_NAME, size,
                KernelName, NULL);
clGetKernelWorkGroupInfo(kernel, device,
                         CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE,
                         sizeof(size_t), &size, NULL);
clGetKernelArgInfo(kernel, 0, CL_KERNEL_ARG_NAME, 0, NULL,
                   &size);
ArgName = (char *)malloc(size);
clGetKernelArgInfo(kernel, 0, CL_KERNEL_ARG_NAME, size, ArgName,
                   NULL);
……

上述代码分别查询了内核函数名称,指定设备执行内核的最优的工作组大小倍数,以及内核函数参数的名称。

对于创建的内核对象,可以使用如下参数操作内核对象的引用计数值:

cl_int clRetainkernel(cl_kernel kernel)
cl_int clReleasekernel (cl_kernel kernel)

clRetainkernel增加内核对象引用计数(引用计数+1),clReleasekernel减少内核对象引用计数(引用计数-1)。当引用计数值为0是,则释放内核对象。

点击复制链接 与好友分享!回本站首页
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:3.6.2 设置内核参数
下一篇:3.7 执行内核
相关文章
图文推荐
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站