我想获得有关已编译 OpenCL 内核的以下信息 - 类型列表、参数顺序(如果可能的话 - 带有内存和访问分类器)。内核是在应用程序运行时从源代码构建的。
实际上,在 OpenCL 1.2 中已经存在用于此类查询的适当功能 -clGetKernelArgInfo
但由于项目限制,我必须找到使用纯 OpenCL 1.0 实现此类功能的方法,而无需任何扩展。
目前,我正在考虑三种方法:
- 编写简单的 Ansi C 解析器以直接从 OpenCL 内核的源代码获取有关内核签名的信息
- 在 OpenCL 代码中使用宏来标记内核的参数以进行简单的应用内解析(通过扩展这个想法)
- 使用宏和类助手定义内核参数的最可能组合列表(由于我的项目的限制,可以在 3-5 种常见的 arg 类型下操作)
我的问题:还有其他方法可以获取有关已编译内核的信息吗?
我想使用这些信息来减少客户端代码中 OpenCL 例程的数量,方法是在小型包装器中封装对/Read的调用clCreateBuffer
,它应该检查提供的参数、分配设备端 ptrs、从主机复制数据/向主机复制数据等等。clEnqueueWrite
clSetKernelArg