从GPU获取OpenCL程序代码

时间:2014-03-03 18:47:24

标签: opencl

我有使用OpenCL的程序做数学,我怎么能得到opencl的源代码,当这个程序做计算时在我的gpu上执行?

2 个答案:

答案 0 :(得分:3)

最直接的方法是在应用程序中查找内核字符串。有时您可以在某个.cl文件中找到它的源代码,否则您可以尝试使用类似strings的内容扫描应用程序的二进制文件。如果应用程序没有故意模糊内核源代码,您可能会使用其中一种方法找到它。

更灵活的方法是捕获提供给OpenCL API的字符串。您甚至可以提供自己的OpenCL实现,只需在相关的cl函数中打印出内核字符串。这实际上非常简单:从pocl开始并更改the implementation of clCreateProgramWithSource以打印输入字符串 - 这是一个简单的代码更改。

然后,您可以将该修改后的版本安装为OpenCL实现,并确保应用程序使用它。如果应用程序需要某些OpenCL功能,这可能会很棘手,但您的实现当然可以解决这些问题。

请注意,将来SPIR会使这种事情变得不可能 - 你将能够获得内核的IR,但不能获得它的来源。

答案 1 :(得分:1)

clGetProgramInfo(...,CL_PROGRAM_BINARIES,...)获取已编译的二进制文件,但解释依赖于体系结构。各种SDK都有不同的工具可以让你获得GPU组装。