跳至内容

反汇编视图

ISA 反汇编一次仅显示一个着色器阶段或计算内核,使用相同的颜色编码方案和树结构。

如果有多个 GPU 作为目标,请使用反汇编视图左上角的下拉菜单在设备之间切换。

可以通过使用“查看选项”下拉菜单来显示或隐藏列,从而自定义列。

基本块可以单独或一次性展开和折叠。要展开或折叠单个块,请单击指令行左侧的箭头。要一次性展开或折叠着色器中的所有块,请分别使用 (Ctrl + 右箭头) 或 (Ctrl + 左箭头) 快捷键。

可以选中并高亮显示令牌,以查看选定令牌(指令操作码、寄存器和常量)的其他实例。

可以单击分支指令引用的基本块,滚动到该分支指令。同样,可以单击分支指令中引用的块以滚动到该块。分支导航会被记录下来,并可以使用导航历史进行回放。

任何列中的文本都可以被搜索,并且开发人员可以使用下方显示的控件直接导航到特定行。

可以使用键盘快捷键调用搜索命令 (Ctrl + F) 和转到行命令 (Ctrl + G)。

匹配搜索结果的指令行会被高亮显示。垂直滚动条还将指示所有匹配项的位置,从而为您提供着色器中各种匹配项的视觉指示。

将鼠标悬停在操作码上会显示一个工具提示,其中包含该操作码的解释,经过短暂延迟后显示。

右键单击反汇编视图并单击“在资源管理器中显示反汇编文件”会打开当前构建的工件。

右键单击反汇编视图并单击“复制选定的反汇编”会复制选定的反汇编行。

VGPR 压力可视化

成功构建代码后,您会在反汇编视图中看到一个名为“VGPR pressure”的新列。此列默认显示,并可使用“查看选项”下拉菜单进行隐藏。

列标题文本格式为“VGPR pressure (used x; allocated: y/256)”,它提供了整个着色器的摘要,其中 ‘x’ 表示当前着色器使用的总 VGPR 数,‘y’ 表示分配的总 VGPR 数。将鼠标悬停在任何列单元格上,将显示一个工具提示,其中包含该特定指令处活动 VGPR 的摘要,以及关于需要减少多少 VGPR 以节省该指令处 VGPR 块的提示。请注意,VGPR 是按块分配的,块的大小各不相同。VGPR 块的大小取决于目标 GPU,在某些情况下,还取决于着色器的特定特性,例如编译时使用的 wave 大小。提示表明需要释放多少 VGPR 才能在该着色器点释放整个 VGPR 块。

请注意,在生成提示时,工具会考虑目标 GPU 和相关的着色器特性来确定 VGPR 分配块的大小。在检查 VGPR pressure 列单元格时,除了显示该指令处活动 VGPR 数量的数值外,您还会注意到一个可视化条,用于显示 VGPR 使用情况和 VGPR 块的使用情况。可视化条越空,表示分配的 VGPR 块的使用率越低,这意味着需要减少的 VGPR 越少才能释放该块。

在上图中,我们有一个 VGPR 分配块大小为 8 VGPR 的着色器。您可以看到不同行的可视化条具有不同的颜色。当活动 VGPR 值接近 0 时,条的颜色会变绿;当值接近 256 时,颜色会变红。可视化条已满的行(VGPR 使用值为 8 的倍数,例如 104、96、88 等)显示了着色器中 VGPR 分配块已充分利用的点。然而,在条部分为空的行中,并非所有分配的 VGPR 都被使用。我们之前提到的工具提示将告知您需要减少多少 VGPR 才能释放该 VGPR 分配块。

如果任何指令的寄存器压力详细信息无法生成,将显示一个红色危险符号,如下面的图像所示。无法解析的指令将在 VGPR pressure 列中显示“N/A”。将鼠标悬停在危险符号上会以工具提示的形式显示无法解析的指令计数。

如果任何指令处的 VGPR 使用数量达到最大值,将显示一个黄色危险符号,如下面的图像所示。

如前所述,可视化条的颜色会随着活动 VGPR 值接近 0 而变绿,随着值接近 256 而变红。为了计算每条指令可视化条的颜色,我们将 0-256 VGPR 范围分解为 8 个范围,每个范围覆盖 32 个 VGPR(0-32、32-64 等)。每个范围都被分配了唯一的颜色,从第一个范围的浅绿色到最后一个范围的深红色。下面是一个显示各种颜色范围的截图。

您可以通过按 F4 功能键,或在应用程序的“编辑”菜单中选择“转到下一个最大 VGPR 压力行”项,或按 Ctrl+F4 快捷键来循环浏览所有具有最大 VGPR 压力的行。行将按如下所示的高亮显示。

在反汇编视图的上下文菜单中选择“转到下一个最大 VGPR 压力行”选项也可以让您循环浏览最大活动 VGPR 压力行。此选项显示在下图的图像中。

切换内核将重置该功能,您必须使用上述选项之一才能再次看到最大活动 VGPR 压力行。此时,当前内核的第一个最大 VGPR 行将被高亮显示。如果“VGPR pressure”列当前被隐藏,按 F4 或 Ctrl+F4 键将不起作用,编辑菜单中显示此功能的项目也将被禁用。

按 Shift+F4 键组合将按相反顺序显示匹配项。

垂直滚动条还将指示所有具有最大 VGPR 压力的行,为您提供着色器可以优化的位置的视觉指示。

资源使用情况

反汇编表下的资源使用情况部分显示了 ISA 使用的 GPU 资源。视图中的信息显示如下:

  • VGPR 消耗:<已使用>/<可用>

  • SGPR 消耗:<已使用>/<可用>

  • VGPR 溢出(如果发生,否则不显示)

  • SGPR 溢出(如果发生,否则不显示)

  • LDS 消耗:<已使用>/<可用>

  • Scratch 内存使用情况

  • 指令缓存使用情况

当由于使用 GPU 资源而检测到性能风险时,RGA 将显示一个警告图标,并以黄色高亮显示相关资源。

需要开发人员关注的资源风险定义为:

  • VGPR/SGPR 风险:发生了寄存器溢出,或 <已使用> == <可用>。

  • LDS 风险:LDS 中 <已使用> == <可用>。

  • Scratch 内存风险:使用了 scratch 内存。

  • 指令缓存风险:代码大小大于指令缓存。

© . This site is unofficial and not affiliated with AMD.