【问题标题】:Getting OpenCL program code from GPU从 GPU 获取 OpenCL 程序代码
【发布时间】:2014-04-04 23:21:09
【问题描述】:

我有一个使用 OpenCL 做数学的程序,我如何获得 opencl 的源代码,当这个程序做计算时在我的 gpu 上执行?

【问题讨论】:

    标签: opencl


    【解决方案1】:

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

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

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

    请注意,在未来,SPIR 可以让这种事情变得不可能 - 您将能够获得内核的 IR,但不能获得它的源代码。

    【讨论】:

      【解决方案2】:

      clGetProgramInfo(..., CL_PROGRAM_BINARIES, ...) 为您提供编译后的二进制文件,但解释取决于体系结构。不同的 SDK 有不同的工具可以让你组装 GPU。

      【讨论】:

      • 这在我构建程序时有效,但我需要对其他封闭程序执行此操作。我无法编译任何东西,但我需要获取在 GPU 上执行的源代码。
      猜你喜欢
      • 1970-01-01
      • 2015-09-23
      • 2015-06-23
      • 1970-01-01
      • 2020-09-26
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多