如何获取内核信息

时间:2013-11-13 14:49:39

标签: opencl

我希望获得有关已编译的OpenCL内核的以下信息 - 类型列表,params顺序(如果可能的话 - 使用内存和访问分类器)。在app的运行时间内,内核是从源代码构建的。

实际上,在OpenCL 1.2中已存在适用于此类查询的函数 - clGetKernelArgInfo,但由于项目限制,我必须找到使用纯OpenCL 1.0实现此类功能的方法,而不需要任何扩展。

目前,我正在考虑三种方法:

  1. 编写简单的Ansi C解析器,直接从OpenCL内核的源代码获取有关内核签名的信息
  2. 使用OpenCL代码中的宏来标记内核的参数,以便进行简单的应用内解析(通过扩展this idea
  3. 使用宏和类助手定义最可能的内核参数组合的列表(由于我的项目约束,它可以在3-5种常见的arg类型下运行)
  4. 我的问题:有没有其他方法可以获取有关已编译内核的信息?

    我想通过在小包装器中封装对clCreateBufferclEnqueueWrite / Read,clSetKernelArg的调用来使用此信息来减少客户端代码中OpenCL例程的数量,这应该检查提供的参数,分配设备端ptrs,从/向主机复制数据等。

1 个答案:

答案 0 :(得分:1)

Khronos WebCL Validator为您提供clGetKernelArgInfo的等价物,包括所有限定词。

必要的缺点是它是一个基于Clang / LLVM的完整解析器。与典型的OpenCL编译器运行所需的时间大致相同(不是巧合),并且可执行文件大小增加了大约10兆字节。