4

我想获得有关已编译 OpenCL 内核的以下信息 - 类型列表、参数顺序(如果可能的话 - 带有内存和访问分类器)。内核是在应用程序运行时从源代码构建的。

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

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

  1. 编写简单的 Ansi C 解析器以直接从 OpenCL 内核的源代码获取有关内核签名的信息
  2. 在 OpenCL 代码中使用宏来标记内核的参数以进行简单的应用内解析(通过扩展这个想法
  3. 使用宏和类助手定义内核参数的最可能组合列表(由于我的项目的限制,可以在 3-5 种常见的 arg 类型下操作)

我的问题:还有其他方法可以获取有关已编译内核的信息吗?

我想使用这些信息来减少客户端代码中 OpenCL 例程的数量,方法是在小型包装器中封装对/Read的调用clCreateBuffer,它应该检查提供的参数、分配设备端 ptrs、从主机复制数据/向主机复制数据等等。clEnqueueWriteclSetKernelArg

4

1 回答 1

1

Khronos WebCL 验证器为您提供 clGetKernelArgInfo 的等价物,包括所有限定符。

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

于 2013-12-05T09:15:28.947 回答