从 GPU 获取 OpenCL 程序代码
Posted
技术标签:
【中文标题】从 GPU 获取 OpenCL 程序代码【英文标题】:Getting OpenCL program code from GPU 【发布时间】:2014-04-04 23:21:09 【问题描述】:我有一个使用 OpenCL 做数学的程序,我如何获得 opencl 的源代码,当这个程序做计算时在我的 gpu 上执行?
【问题讨论】:
【参考方案1】:最直接的方法是在应用程序中查找内核字符串。有时您可以在某个 .cl 文件中找到其源代码,否则您可以尝试使用 strings 之类的内容扫描应用程序的二进制文件。如果应用程序没有故意混淆内核源代码,您可能会使用其中一种方法找到它。
更安全的方法是捕获提供给 OpenCL API 的字符串。你甚至可以提供你自己的 OpenCL 实现,它只在相关的 cl 函数中打印出内核字符串。这实际上很简单:从 pocl 开始并更改 the implementation of clCreateProgramWithSource 以打印出输入字符串 - 这是一个微不足道的代码更改。
然后,您可以将该修改后的版本安装为 OpenCL 实现,并确保应用程序使用它。如果应用程序需要某些 OpenCL 功能,这可能会很棘手,但您的实现当然可以依赖这些功能。
请注意,在未来,SPIR 可以让这种事情变得不可能 - 您将能够获得内核的 IR,但不能获得它的源代码。
【讨论】:
【参考方案2】:clGetProgramInfo(..., CL_PROGRAM_BINARIES, ...) 为您提供编译后的二进制文件,但解释取决于体系结构。不同的 SDK 有不同的工具可以让你组装 GPU。
【讨论】:
这在我构建程序时有效,但我需要对其他封闭程序执行此操作。我无法编译任何东西,但我需要获取在 GPU 上执行的源代码。以上是关于从 GPU 获取 OpenCL 程序代码的主要内容,如果未能解决你的问题,请参考以下文章
为啥相同的 OpenCL 代码从 Intel Xeon CPU 和 NVIDIA GTX 1080 Ti GPU 具有不同的输出?