【问题标题】:Disassemble an OpenCL kernel?反汇编 OpenCL 内核?
【发布时间】:2011-10-05 01:50:50
【问题描述】:

我不确定这是否可能。我想深入研究OpenCL,所以想知道有没有工具可以反汇编编译好的OpenCL内核。

对于普通的 x86 可执行文件,我可以使用 objdump 来获得反汇编视图。是否有类似的 OpenCL 内核工具?

【问题讨论】:

  • 我意识到要反汇编 OpenCL 内核,它非常依赖于供应商。请搜索平台特定的 SDK。即 Nvidia 和 Intel OpenCL SDK,它们都包含某种针对其内核的反汇编程序。

标签: opencl gpu gpgpu disassembly


【解决方案1】:

如果您在其 GPU 上使用 NVIDIA 的 OpenCL 实现,您可以执行以下操作来反汇编 OpenCL 内核:

  1. 使用clGetEventProfilingInfo() 将ptx 代码转储到文件中,例如ptxfile.ptx。有关此功能的更多详细信息,请参阅 OpenCL 规范。

  2. 使用 nvcc 将 ptx 编译为 cubin 文件,例如:nvcc -cubin -arch=sm_20 ptxfile.ptx 将编译 ptxfile.ptx 到计算能力 2.0 设备上。

  3. 使用cuobjdump将cubin文件反汇编成GPU指令。例如:cuobjdump -sass ptxfile.cubin

希望这会有所帮助。

【讨论】:

  • 值得注意的是,虽然所有这些都是正确的,但它完全特定于 NVIDIA 工具链,不适用于其他供应商的实现。
  • 是的,我忘了补充。感谢您修复它。
  • 谢谢!这还是值得的,我先试试cuda,如果ati和sandy bridge有类似的解决方案,我也想听听你的意见。
  • 为什么clGetEventProfilingInfo 会生成一个 PTX 文件?
【解决方案2】:

我知道这是一个老问题,但如果有人来这里拆解 AMD GPU 内核,您可以在 linux 中执行以下操作:

export GPU_DUMP_DEVICE_KERNEL=3

这会使在您的机器上编译的任何内核将汇编代码转储到同一目录中的文件中。

来源: http://dis.unal.edu.co/~gjhernandezp/TOS/GPU/ATI_Stream_SDK_OpenCL_Programming_Guide.pdf

第 4.2.1 和 4.2.2 节

【讨论】:

【解决方案3】:

如果您使用 AMD GPU,则可以使用分析器工具。它是免费的、跨平台的,有两种形式:

  1. 命令行工具(作为 CodeXL 包的一部分提供,安装后搜索 CodeXLAnalyzer 可执行文件)。
  2. CodeXL GUI 应用程序(只需切换到 CodeXL 中的分析器模式)。

以下是您可以使用分析器执行的操作的简短摘要:

  1. 为安装的驱动程序支持的任何 GPU 编译 OpenCL 内核、OpenGL 着色器和 D3D 着色器(即使您的系统上没有物理安装 GPU),并获得 ISA。使用 CodeXL Analyzer(上面的选项 #2),您可以获得更多信息,例如对执行指令所需的时钟周期数的估计。
  2. 查看编译器生成的统计信息(SGPR 使用情况、VGPR 使用情况等)
  3. 为 OpenCL 内核生成 AMD IL 代码。
  4. 导出已编译的二进制文件(ELF,二进制格式)。

您可以从这里下载 CodeXL 工具套件:https://gpuopen.com/compute-product/codexl/

【讨论】:

  • 当您说“安装的驱动程序支持的任何 GPU”时,这是否包括 nVidia 和 Intel?我可以使用它同时为(例如)nVidia 和 AMD 创建二进制文件吗?
  • 不,目前这仅适用于 AMD GPU。
【解决方案4】:

由于不再支持 AMD CodeXLAnalyzer,请使用 Radeon GPU Analyzer

【讨论】:

    【解决方案5】:

    根据我的经验,最简单的解决方案是使用 clangs OpenCL C 编译器并发出 SPIR。 它甚至适用于 Godbolt 的编译器资源管理器: https://godbolt.org/z/_JbXPb

    Clang 也可以发出 ptx (https://godbolt.org/z/4ARMqM) 和 amdhsa (https://godbolt.org/z/TduTZQ),但它可能与相应驱动程序在运行时生成的 ptx 和 amdhsa 程序集不对应。

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 2012-02-01
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 2011-12-06
      相关资源
      最近更新 更多