用户指南
NVIDIA Nsight Graphics 的用户指南。
NVIDIA Nsight Graphics 简介
Nsight Graphics™ 是一款独立的应用程序,用于调试、分析和分析图形应用程序。Nsight Graphics 支持使用 Direct3D 11、Direct3D 12、Vulkan、OpenGL、OpenXR 和 OpenVR 构建的应用程序。
本文档分为不同的部分,以帮助您了解如何开始使用该软件、了解活动,并提供有关用户界面的参考。
入门指南
本节介绍使用 Nsight Graphics 工具的方法。
预期工作流程
在调试或分析时,重要的是将您的调查范围缩小到可以为您提供最具影响力和可操作的数据的路径,以便您得出结论并解决问题。Nsight Graphics 提供了许多工具来适应这些工作流程场景。
当调试渲染问题时,Nsight Graphics 的帧调试器是首选工具。此工具可以检查事件、API 状态、资源值和依赖关系,以了解您的应用程序可能存在问题的地方。有关帧调试器的更多信息,请参阅 帧调试器。
当分析图形应用程序时,第一步是确定您是受 CPU 限制还是受 GPU 限制。如果您受 CPU 限制,您将无法向 GPU 发出足够的工作来充分利用其全部处理能力。如果您受 GPU 限制,则 GPU 无法足够快地处理其收到的工作,并且您的引擎可能会停顿。确定哪个方面限制您的一种方法是使用 Nsight Systems™。Nsight Systems 是一款系统范围的性能分析工具,旨在可视化应用程序的算法,帮助您选择最大的优化机会,并进行调整以在计算机中任意数量的 CPU 和 GPU 上高效扩展。NVIDIA 还在 Nsight Visual Studio Edition 中提供了一个系统分析和跟踪工具;有关该工具的更多信息,请参阅 本网站。
如果您已确定您受 CPU 限制,您将需要使用 CPU 分析工具来发现如何消除低效率,以便更快地向 GPU 发出工作。您可能还需要研究您正在使用的 API 构造的开销,并确定是否有更轻量级的构造可以以更低的成本提供相同的效果。帧调试器工具是您在调整引擎时的一个极佳资源。
Nsight Graphics 中的 GPU 跟踪活动允许分析一些不同的受 GPU 限制的场景。GPU 跟踪通过跟踪着色器在 SM 上跨一系列帧的执行情况,对您的 SM 性能进行深入分析。优化性能的另一个关键技术是利用 GPU 通过使用技术来实现同步计算和图形 (SCG)(也称为异步计算)来处理并行工作的能力。GPU 跟踪使您既可以看到异步计算的机会,又可以确认和衡量异步计算对帧的影响。
如何启动并连接到您的应用程序
要分析应用程序,Nsight Graphics 需要通过其启动工具启动应用程序。以下各节描述了创建项目、启动应用程序以及连接到应用程序的过程,以便您可以执行分析。
启动 Nsight Graphics 后,您将看到创建项目的选项。如果您是第一次使用 Nsight Graphics,请选择“开始活动”下的“继续”来跳过项目创建。

选择后,您将看到一个特定于目标的对话框,您可以在其中配置要启动的应用程序。浏览并选择您希望运行的活动,然后继续执行以下特定于目标的说明,以配置要分析的应用程序。

以下特定于目标的部分描述了如何在每个特定平台上启动和连接。虽然不同目标上的过程可能不同,但所有系统之间存在许多共同点。特别是,一旦启动进程,Nsight 主机必须附加到该进程才能对其进行分析。启动和附加工具的这种逻辑分离允许复杂的用例,包括远程目标、通过命令行启动、重新附加到以前的会话等。但是,Nsight 主机通过支持用户控制的自动连接到刚刚启动的进程,简化了许多常见情况。以下各节依次介绍了这些用例以及更多用例。
在 Windows 目标上启动和连接进程
在 Windows 平台上,Nsight Graphics 支持调试和分析 x64 本机应用程序以及启动 x64 (64 位) 应用程序的 x86 (32 位) 启动器(例如 Steam、Origin)。
使用自动附加启动应用程序
Nsight Graphics 支持自动附加到感兴趣的进程。它通过识别进程层次结构中执行图形工作的进程来实现此目的,表明这些进程是感兴趣的。
要启动您的应用程序,请执行以下步骤。
将应用程序可执行文件设置为您的应用程序的路径。此路径可以是任何可执行文件或批处理文件。
如果您的应用程序需要与应用程序目录不同的工作目录,请立即调整它。
调整环境(如有必要)。
将“自动连接”保留为“是”。
单击“启动”。
启动后,您将看到一个对话框,其中记录了应用程序的启动和附加。启动完成后,您就可以开始分析了。
使用手动附加连接到应用程序
在某些情况下,可能需要手动附加到应用程序。这些情况包括
使用命令行启动器启动应用程序(请参阅 从命令行启动进程)
自动附加正在附加到您不想要的应用程序
需要连接到先前已分离的应用程序并重新附加到分析会话
如果应用程序已启动,请执行以下步骤
单击“连接”按钮。
选择“附加”选项卡。
在“附加”选项卡中选择您希望分析的应用程序,然后单击“附加”。
启动完成后,您就可以开始分析了。

在上面的示例图像中,VRFunhouse.exe 是 UE4Game.exe 启动器的子进程。选择 VRFunhouse.exe 并单击“附加”将允许您分析主应用程序。
远程启动
Windows 上的 Nsight Graphics 通过使用 Nsight Remote Monitor 支持远程调试。这是一个在目标计算机上运行的进程,允许在该计算机上启动连接。
要运行远程监视器,请在目标计算机上安装 Nsight Graphics。然后,通过“开始”>“NVIDIA Corporation”>“Nsight Remote Monitor”在该计算机上启动远程监视器。
在远程计算机上启动监视器后,您需要在 Nsight Graphics 中将远程监视器添加为连接。默认情况下,启动将在本地主机计算机上完成。要添加另一台计算机,请单击“+”按钮。

这将弹出一个对话框,您可以在其中添加计算机名称或 IP 地址。

在“IP/主机名”中输入计算机名称。单击“添加”以添加连接。您刚刚添加的计算机此时将列为目标连接。

可以添加任意数量的连接;可以通过单击所选连接上的“-”来移除连接。可以在启动或附加之前在任何已添加的连接之间切换连接。连接是全局持久的,并且一旦添加,就可以应用于任何项目。
在 Linux 目标上启动和连接进程
Linux 上的远程调试通过 SSH 连接支持。在建立连接以连接到目标计算机时,输入您的 SSH 信息。
从命令行启动进程
Nsight Graphics 提供了一个命令行界面 (CLI),以方便启动环境设置可能很复杂而无法传输到主机应用程序的应用程序。当前,它还提供了一种非交互方式来从命令行生成 C++ 捕获或从命令行生成 GPU 跟踪捕获)。
此可执行文件位于主机应用程序文件夹中
Windows
<install directory>/host/windows-desktop-nomad-x64/ngfx.exe
Linux
<install directory>/host/linux-desktop-nomad-x64/ngfx.bin
注意
原始命令行启动器 (nv-nsight-launcher) 已被此 CLI (ngfx) 取代,因为此 CLI 扩展了原始启动器的功能。
CLI 参数详情
要了解如何启动,请首先使用 --help
参数启动 CLI。这将显示 CLI 具有哪些常规选项。
这些参数中有几个是可选的,而有些是必需的。完整参数列表如下
选项 |
描述 |
---|---|
|
显示所有可用的常规参数。 |
|
显示所有可用参数,包括所有特定于活动的参数。 |
|
选择要使用的目标活动。 此参数始终是必需的。 注意:“活动名称”必须与连接对话框的“活动”部分中的名称完全一致。可用的活动名称也可以在帮助消息 ( |
|
选择要使用的目标平台。 建议设置此参数,否则它将使用本地平台作为默认平台。 注意:“平台名称”必须与连接对话框的“目标平台”部分中的名称完全一致。可用的平台名称也可以在帮助消息 ( |
|
选择要在其上启动应用程序的设备。 默认值为“localhost”。 如果尝试在运行 |
|
设置目标设备上的可执行文件路径。 注意:此参数通常是必需的,但如果已加载项目,则可以从项目设置中隐式推断出来(请参阅 |
|
设置要启动的应用程序的工作目录。 |
|
设置要启动的应用程序的其他环境。 这些参数应采用“FOO=1; BAR=0;”的形式。 |
|
设置传递给要启动的应用程序的参数。 |
|
选择要加载的 Nsight Graphics 项目。 如果已成功加载项目,则可以从加载的项目设置中隐式推断出某些参数(例如 如果某个特定应用程序有专用项目,并且有用于调整活动的已更改和已保存选项,则最好使用此参数运行 CLI。 |
|
设置输出文件夹以导出/写入数据。 如果未指定,它将使用 Nsight Graphics GUI 上的默认文档文件夹 |
|
启用详细模式以显示更多消息。 |
|
默认情况下,操作(例如启动)绑定到适当的超时,如果某些应用程序可能需要很长时间才能执行操作,则禁用超时。 注意:此参数不用于简单地启动目标应用程序。 |
|
将 CLI 作为命令行启动器运行;CLI 在启动目标应用程序后退出。您可以在应用程序启动后使用 Nsight Host 附加到该应用程序。 |
除了上面的常规选项外,还有特定于活动的选项。有关使用特定活动启动的示例,以及引用这些特定于活动的选项,请参阅以下各节
生成 C++ 捕获活动选项(请参阅 从命令行生成 C++ 捕获)
GPU 跟踪活动选项(请参阅 从命令行生成 GPU 跟踪捕获)
如果您希望仅启动应用程序,而不自动执行捕获,则 CLI 可以使用以下命令形式启动应用程序。
ngfx.exe --launch-detached [general_options]
示例
ngfx.exe --activity="Frame Debugger" --platform="Windows" --project="D:\Projects\Bloom.ngfx-proj" --launch-detached
在本地主机中启动应用程序,并使用从 Nsight Graphics 项目读取的启动选项和活动选项。
ngfx.exe --activity="Frame Debugger" --platform="Windows" --hostname=192.168.1.10 --exe=D:\Bloom\bloom.exe --launch-detached
在远程计算机上启动应用程序。
将 Nsight Graphics 与 WebGL 结合使用
Nsight Graphics 能够调试和分析在浏览器中运行的 WebGL 应用程序。但是,必须执行一些设置步骤以确保兼容性并提供尽可能多的 API 上下文信息。这很重要,因为许多浏览器,尤其是在 Microsoft Windows 上,将使用 OpenGL 以外的图形 API 进行后端渲染。因此,当您尝试调试应用程序时,您可能会看到一些 DirectX 调用,这些调用不容易映射到您最初进行的 WebGL 调用。使用正确的设置可以强制 OpenGL 后端,这将看起来更像您期望的那样,并有助于调试。
要开始使用,请确保关闭所有浏览器窗口。这是必要的,因为 Nsight Graphics 使用的方法是将代码注入到您的应用程序中。具体来说,Chrome 倾向于从另一个已运行的进程启动子进程。如果初始进程未注入,则即使您从 Nsight Graphics 连接对话框启动它,子进程也不会注入。因此,请关闭所有浏览器窗口,并使用任务管理器确保没有 Google Chrome 进程(或其他浏览器进程)保留。
接下来,您需要将浏览器设置为使用 OpenGL 后端。在 Chrome 中,您需要
在地址栏中键入 chrome://flags/ 以调出设置
在设置中搜索 OpenGL
对于 ANGLE 图形后端,选择 OpenGL
最后,浏览器通常需要其他设置以确保工具兼容性。对于 Google Chrome,您需要在启动浏览器时指定以下其他命令行选项
选项 |
描述 |
---|---|
–no-sandbox |
禁用某些 Chrome 安全检查以允许进程注入工作。 |
–disable-gpu-watchdog |
禁用 Chrome GPU 活动检查。这允许应用程序实时暂停,而不会导致 Chrome 退出。 |
–disable-features=RendererCodeIntegrity |
禁用渲染器代码完整性功能,该功能会干扰来自 Nsight Graphics 的图形覆盖。 |
–gpu-startup-dialog |
可选:此标志将在图形进程启动时导致显示对话框,以帮助查找您要调试的进程。请注意,Nsight Graphics 通常可以在不求助于手动干预的情况下找到进程。 |
自动清理启动器进程
有些进程可能会干扰应用程序分析会话的启动。这些进程通常是长期运行的应用程序启动器 - 它们通常在子进程和父启动器之间执行协调启动。在某些情况下,这种协调启动可能会干扰 Nsight Graphics 将自身注入到方法分析设置中的过程。
为了缓解此问题,Nsight Graphics 尝试检测已知会干扰的进程,并为用户提供一个机会(如下所示的对话框),以便在启动之前终止进程,从而允许无干扰地启动。
对话框上的按钮执行以下操作
是 - 终止进程并继续启动
否 - 不终止进程,但继续启动应用程序
中止 - 完全取消启动
要编辑检测到的进程列表,请在“工具”>“选项”>“注入”中向列表添加条目。
连接进程后
连接进程后,即可对其进行分析。对于许多活动,将出现一组默认窗口,这些窗口为与活动相关的分析提供了一组有影响力的工具。您还可以通过从菜单栏中选择视图来向应用程序添加其他窗口。有关每个视图和工具窗口的详细讨论,请参阅用户界面参考。
对于上面启动的 帧调试器 活动,既有实时分析实用程序,也有捕获实用程序。当从此活动捕获时,通过 目标应用程序捕获热键 或“实时分析捕获”完成,将打开许多视图。在目标应用程序上,HUD 将与工具栏和滚动条一起出现。此 UI 允许您查看有关应用程序状态、资源和同步的详尽信息。


有了如此广泛的信息集,调试渲染问题变得更加容易。
选择要调试的窗口
如果您的应用程序有多个窗口,每个窗口都有一个图形上下文,您可以选择您要专注于调试和分析工作的窗口。例如,如果您的应用程序有 3 个不同的窗口,每个窗口都有场景的自己的视图,您可以轻松地选择要捕获的窗口。当检测到多个窗口时,顶部工具栏上将出现一个新的“选择窗口”控件。右侧的组合框将填充检测到的窗口,包括窗口名称和大小,以帮助确定正确的窗口。

在您当前未处于活动捕获/重放中的任何时候,您都可以使用该控件来指定要捕获的窗口。如果您选择“默认”,则最近呈现后缓冲区的窗口将被选为要捕获的窗口。此选项可用于帧调试器和生成 C++ 捕获活动。
目标应用程序捕获热键
活动 支持从 Nsight Graphics UI 或直接从目标应用程序触发捕获。默认捕获热键是 F11。也可以在“工具”>“选项”中配置此热键。

配置您的系统以获得最佳分析效果
为了使您的系统与 Nsight Graphics 提供的分析工具良好地配合工作,您应该考虑许多细节。
配置开发者模式
如果使用 Windows 计算机,我们建议在开发者模式下运行。
使用开发者模式的原因包括
D3D12 Agility SDK 的预览版本需要开发者模式。
某些应用程序只能使用 D3D12 预览版 Agility SDK 进行重放。
请按照 https://learn.microsoft.com/en-us/windows/apps/get-started/developer-mode-features-and-debugging 上的说明设置开发者模式。
配置您的应用程序以获得最佳分析效果
为了使您的应用程序与 Nsight Graphics 提供的分析工具良好地配合工作,在配置应用程序时应考虑许多细节。
使用性能标记
性能标记几乎对所有工作流程都至关重要。我们建议您的应用程序在工具分析下运行时始终使用性能标记。
性能标记最常用于描绘事件的各个部分,并记录它们在应用程序中的开始和结束位置。它们也可以嵌套以显示事件的子部分。性能标记通常用于测量算法内部部分将花费的时间量。
Nsight Graphics 中支持多种不同类型的性能标记
所有 D3D 应用程序都支持 D3D9 性能标记。
ID3DUserDefinedAnnotation
可用于 D3D11 或 D3D12 应用程序。请参阅 MSDN 上的 ID3DUserDefinedAnnotation 接口。
D3D12 支持 Microsoft 的
PIXBeginEvent/PixEndEvent
API 提供的性能标记。请参阅 https://devblogs.microsoft.com/pix/winpixeventruntime/。
Vulkan 应用程序可以使用
VK_EXT_debug_utils
或VK_EXT_debug_marker
。
OpenGL 应用程序使用
KHR_debug
组、glPushDebugGroup
和glPopDebugGroup
。
着色器编译
当您具有可用于调试的完整着色器源代码时,Nsight Graphics 的效果最佳。请按照以下步骤设置您的应用程序以获得最佳配置。
D3D 配置
Nsight Graphics 在访问着色器的原始 HLSL 源代码时效果最佳。有几种方法可以完成此任务。第一种方法是使用旧版 D3DCompile
函数或最新的 IDxcCompiler
接口之一将着色器预编译为二进制格式,并将结果保存到文件中。
或者,您可以使用 DirectX SDK 提供的脱机编译器 fxc.exe
或 dxc.exe
。
对于这些方法中的每一种,您都需要指定一些标志,以便将 HLSL 调试信息嵌入到二进制输出中,如下所述
编译类型 |
所需操作 |
---|---|
通过 dxc.exe 或 fxc.exe 脱机编译的着色器 |
在命令行中添加 对于动态着色器编辑,您可以使用 |
通过 IDxcCompiler3::Compile 在线编译的着色器 |
在 pArguments 参数中添加 对于动态着色器编辑,您可以使用 请注意,早期版本的 Compile 函数,包括 IDxcCompiler::Compile 和 IDxcCompiler2::CompileWithDebug,已被弃用。 Microsoft 建议使用 IDxcCompiler3::Compile 作为替代方案。 |
通过 D3DCompile、D3DCompile2、D3DCompileFromFile 在线编译的着色器 |
将 D3DCOMPILE_DEBUG 标志添加到 Flags1 参数 |
Nsight Graphics 还支持从使用 dxc.exe -Fd 选项生成的文件中读取调试信息。要加载这些外部文件,用户需要在 <xref href=”global_options_search_paths.dita”/> 的“编译着色器符号路径”部分设置适当的路径。
Vulkan 配置
Nsight Graphics 在访问着色器的原始高级源代码时效果最佳。为了实现这一点,着色器需要使用调试信息进行编译,以便将原始高级源代码嵌入到 SPIR-V 二进制模块中。
当使用 glslangValidator
工具时,在着色器编译命令行中添加 -g
标志。例如
glslangValidator -V shader.vert -o shader.spv -g
当使用 dxc
工具时,在着色器编译命令行中添加 -Zi
标志。例如
dxc -spirv -T ps_6_5 -E PSMain shader.frag -Fo shader.spv -Zi
函数调试信息
要在 SPIRV 中启用函数调试信息,这是 火焰图、自顶向下调用 和 自底向上调用 的依赖项,我们需要为 glslangValidator
添加参数 -gVS
(而不是 -g
),或者为 dxc
添加 -fspv-debug=vulkan-with-source
,以启用 SPIRV NonSemantic Shader DebugInfo 扩展。
注意
glslangValidator
存在一个已知问题,即指令 DebugInlinedAt 不受支持。这导致所有函数都被视为顶层函数,而不是在某处被调用。因此,火焰图 中缺少函数层次结构,并且在 自顶向下调用 和 自底向上调用 中,没有函数计数器会聚合到调用方函数。
注意
glslangValidator
存在一个已知问题,即对于多个源文件,DebugCompilationUnit 指令仅生成一次。这会导致从 SPIRV 指令到源代码行号的错误关联。
命名对象和线程
Nsight Graphics 的许多视图和分析都受益于命名 API 对象和线程。与性能标记类似,这些名称可以帮助为您的分析提供更多上下文。下表列出了命名对象和线程的受支持方法。
命名对象
- D3D11
没有编程方法;使用 Nsight 生成的名称
- OpenGL
平台 |
方法 |
---|---|
Windows |
|
Linux |
尚不支持 |
如何设置和检查 GPU 崩溃转储
本节介绍如何使用 NVIDIA Nsight Aftermath Monitor 为使用 Direct3D 12 或 Vulkan API 的应用程序生成 GPU 崩溃转储,以及如何使用 Nsight Graphics 中的崩溃转储检查器插件打开和检查这些 GPU 崩溃转储。
或者,开发人员还可以使用 NVIDIA Nsight Aftermath SDK 将 GPU 崩溃转储收集支持添加到他们的图形应用程序中。
工作流程
使用 Nsight Aftermath GPU 崩溃转储的一般工作流程是:
运行 NVIDIA Nsight Aftermath GPU 崩溃转储监视器。
配置所需的 GPU 崩溃转储功能。
可选:如果您想通过事件标记收集其他信息,您可以选择使用 Nsight Aftermath SDK 来检测图形应用程序。
运行要捕获 GPU 崩溃转储的图形应用程序,并重现 GPU 崩溃或挂起,从而允许监视器收集 GPU 崩溃转储。
在 Nsight Graphics 中打开 GPU 崩溃转储。
配置 GPU 崩溃转储检查器设置。
检查 使用 Nsight Graphics 崩溃转储检查器的崩溃转储数据。
有关此过程的每个步骤的详细信息,请参阅以下各节。
GPU 崩溃转储监视器
NVIDIA Nsight Aftermath 崩溃转储监视器提供了捕获 GPU 崩溃或 GPU 挂起的崩溃转储文件的方法,以及修改与崩溃转储生成相关的驱动程序配置设置的方法。
运行 GPU 崩溃转储监视器
NVIDIA Nsight Aftermath Monitor nv-aftermath-monitor.exe
安装在 Nsight Graphics 主机目录中。通常是
<install directory>\host\windows-desktop-nomad-x64
崩溃转储监视器应用程序默认情况下将在后台启动。其用户界面可通过 Microsoft Windows 系统通知区域(系统托盘)中的 NVIDIA Nsight Aftermath Monitor 图标访问。
配置 GPU 崩溃转储监视器
与 GPU 崩溃转储创建相关的所有配置选项都可通过 GPU 崩溃转储监视器设置 对话框获得。
设置存储崩溃转储文件的目录。
设置存储着色器调试信息文件的目录。
启用 Aftermath GPU 崩溃转储收集。将Aftermath 模式设置为全局以启用所有使用 D3D12 或 Vulkan API 的应用程序的崩溃转储,或者通过管理应用程序白名单有选择地为一个或多个应用程序启用它。
启用所需的 Aftermath 图形驱动程序功能
生成着色器调试信息以生成着色器调试信息(用于从传递给 NVIDIA 图形驱动程序的着色器 IL 映射到 GPU 执行的着色器微代码的行号表),适用于应用程序加载的所有着色器。
GPU 崩溃转储监视器会将调试信息存储到扩展名为
.nvdbg
的文件中,这些文件位于 GPU 崩溃转储监视器设置 的 常规设置选项卡 中配置的 调试信息转储目录 目录中。着色器调试信息是必需的,用于将活动或错误着色器 Warp 的着色器微代码指令映射到着色器 IL 或着色器源代码行。着色器调试信息通过嵌入到崩溃转储文件中的唯一 着色器调试信息标识符 来标识。
另请参阅关于 源着色器调试信息 的部分,了解有关如何使用源级调试信息编译着色器源的详细信息。
启用资源跟踪以启用对实时和最近销毁的资源的其他驱动程序端跟踪。
这允许 Aftermath 识别与 GPU 虚拟地址相关的资源,这些虚拟地址在由于 GPU 页面错误而崩溃的情况下可见。正在跟踪的资源信息包括有关资源大小、其格式以及资源对象的当前删除状态的详细信息。 D3D12 开发人员还可以考虑使用
GFSDK_Aftermath_DX12_RegisterResource
函数来检测应用程序,以注册应用程序创建的 D3D12 资源。这将允许 Aftermath 跟踪其他信息,例如应用程序设置的资源调试名称。对于 Vulkan 应用程序,也将捕获通过vkSetDebugUtilsObjectNameEXT
设置的资源调试名称。有关如何检测和应用程序进行 D3D12 资源跟踪的更多详细信息,请参阅 Nsight Aftermath SDK 文档。启用调用堆栈捕获以启用自动生成 Aftermath 事件标记,用于跟踪应用程序启动的所有绘制调用、计算和光线追踪调度、光线追踪加速结构构建操作或资源复制的来源。
自动事件标记在相应的命令之后立即添加到命令流中,并将记录命令的函数的 CPU 调用堆栈作为数据有效负载。
注意
启用此功能将导致相当大的驱动程序开销,以收集必要的信息。
注意
启用此功能后,GPU 崩溃转储文件可能包含崩溃应用程序的可执行文件的文件路径以及它已加载的所有 DLL 或 DSO 的文件路径。
启用着色器错误报告以启用一种特殊模式,该模式允许 GPU 报告其他运行时着色器错误。这可以在调试与着色器执行相关的挂起、崩溃或意外行为时提供其他信息。
启用此功能可能会导致其他崩溃转储报告着色器中表现出未定义行为或存在隐藏错误的问题,这些问题到目前为止一直未被注意到,因为默认情况下硬件会静默忽略它们。使用此选项启用的其他错误检查将导致以下情况的 GPU 异常
使用未对齐的地址访问内存,例如读取或写入不是访问大小倍数的字节地址。
访问超出范围的内存,例如读取或写入超出(组)共享或线程局部内存的声明边界,或从超出范围的常量缓冲区地址读取。
使用不兼容的格式或内存布局访问纹理。
达到调用堆栈限制。
注意
此功能仅在 NVIDIA 图形驱动程序 R515 或更高版本中受支持。
注意
在 Windows 上,修改 Aftermath 图形驱动程序设置需要 Windows 管理员权限。因此,当修改和应用任何这些设置时,可能会弹出一个用户帐户控制确认窗口,要求您提供修改系统设置的权限。
启用所需的 Aftermath 全系统功能
启用 SM 寄存器数据收集以在 SM 内部发生故障时收集 SM 寄存器值。这可以在调试与着色器执行相关的 GPU 崩溃时提供其他信息。
由于这是一个系统范围的设置,因此修改它也可能会影响其他工具,例如 Nsight VSE CUDA 调试器,并可能导致意外行为!在 Linux 上,此功能始终启用,与其他工具没有不兼容性。
注意
此功能仅适用于 NVIDIA 图形驱动程序 R535 或更高版本的 D3D12 和 Vulkan API,并且需要 Nsight Graphics Pro 才能可视化数据。从 R550 驱动程序系列开始,默认情况下启用 SM 寄存器数据收集功能,并且不再提供该设置。
注意
在 Windows 上,修改 Aftermath 系统设置需要 Windows 管理员权限。因此,当修改和应用任何这些设置时,可能会弹出一个用户帐户控制确认窗口,要求您提供修改系统设置的权限。
GPU 崩溃转储检查器
NVIDIA Nsight Aftermath 崩溃转储检查器提供了打开、检查和分析由 NVIDIA Nsight Aftermath Monitor 或 Nsight Aftermath SDK 创建的 GPU 崩溃转储文件的方法。
加载 GPU 崩溃转储文件
GPU 崩溃转储文件使用 .nv-gpudmp
文件扩展名,可以通过文件 > 打开文件... 加载。这将弹出一个 GPU 崩溃转储检查器 窗口,显示崩溃转储文件的内容。
配置 GPU 崩溃转储检查器
为了使用 GPU 崩溃转储检查器提供的所有功能,应在 搜索路径设置 中进行以下配置设置。
将存储二进制着色器文件(DXIL 或 SPIR-V 着色器文件)的目录添加到着色器二进制文件。如果找不到二进制着色器,则 着色器视图 将无法显示中间着色器汇编代码或着色器源代码。
有关如何生成这些文件的更多信息,请参阅 源着色器调试信息。
将存储单独的着色器调试信息文件(例如,由
dxc.exe
生成的.lld
或.pdb
文件)的目录添加到单独的着色器调试信息。如果找不到着色器调试信息,则 着色器视图 将无法将活动或错误 Warp 的 GPU PC 地址映射到中间着色器汇编或着色器源代码位置。有关如何生成这些文件的更多信息,请参阅 源着色器调试信息。
将存储 GPU 崩溃转储监视器生成的 NVIDIA 着色器调试信息文件的目录添加到 NVIDIA 着色器调试信息。如果找不到 NVIDIA 着色器调试信息,则 着色器视图 将无法将活动或错误 Warp 的 GPU PC 地址映射到中间着色器汇编或着色器源代码位置。
可选地,将存储着色器源文件的目录添加到着色器源。通常,这不是必需的,因为着色器调试信息已经包含着色器源。仅当着色器是从包含对其他源文件引用的源编译而来时(例如,通过
#line
指令),才可能需要指定其他源目录,以便 着色器视图 能够找到正确的着色器源。添加在其中查找已捕获 GPU 崩溃转储的图形应用程序的符号文件的目录到应用程序调试信息。这允许 Aftermath 标记调用堆栈视图 将地址解析为函数和源代码位置。
检查 GPU 崩溃转储文件
使用 GPU 崩溃转储检查器 分析崩溃原因。这不是关于如何分析 GPU 崩溃转储的详尽教程,因为每次崩溃或挂起都不同,但它应该提供一些入门提示。
加载崩溃转储文件后,通常最好先检查 转储信息 选项卡上的 异常摘要。这将显示高级故障原因,例如图形设备是否已挂起或是否发生页面错误等错误。如果发生页面错误或着色器故障,此部分将包含分析,其中提到了潜在原因,并提供了指向 崩溃信息 选项卡和 着色器视图 中相关信息的链接。
如果发生挂起,则最好检查 转储信息 选项卡上是否有 活动 Warp 部分显示着色器活动。这可能指向非常长时间运行的着色器 Warp 或陷入无限循环的着色器 Warp 的问题。在这种情况下,着色器视图 可能有助于找到问题的根本原因。
如果设备状态指示存在内存故障,则下一步是查找 转储信息 选项卡上的 页面错误 部分。这可能有助于查明超出范围的资源访问或访问已删除资源的问题。
如果应用程序使用 Aftermath 事件标记 进行检测,则 转储信息 选项卡上应提供 Aftermath 标记 部分。这可能有助于查明导致问题的绘制或调度调用。
如果在捕获 GPU 崩溃转储时启用了 调用堆栈捕获,则 Aftermath 标记部分中应提供调用堆栈链接,指向可能与问题相关的绘制、调度或复制调用。
最后,转储信息 选项卡上的 GPU 状态 部分可能会提供一些关于崩溃发生时图形管线的哪些部分处于活动状态或发生故障的提示。
使用 Aftermath API 检测应用程序
NVIDIA Nsight Aftermath SDK 提供了 Aftermath API,开发人员可以使用它来检测他们的应用程序。可以从 https://developer.nvidia.com/nsight-aftermath 下载最新版本。
默认情况下,与 Nsight Graphics 版本发布时可用的最新版本 SDK 包与 Nsight Graphics 一起安装在
<install directory>\SDKs\NsightAftermathSDK
有关库提供的功能以及如何在应用程序中使用它的详细信息,可以在 SDK 包随附的 Readme.md 和头文件中找到。
Aftermath 事件标记
在 D3D 应用程序中,Aftermath 事件标记 API (GFSDK_Aftermath_SetEventMarker
) 可用于将用户定义数据的事件标记直接注入到图形命令流中。如果应用程序使用事件标记进行检测,则会将有关 GPU 为每个命令流处理的最后一个事件标记的信息捕获到 GPU 崩溃转储中,包括用户提供的事件数据。有关 Aftermath 事件标记以及如何检测应用程序以使用它们的更多信息,请参阅 Nsight Aftermath SDK 文档。
注意
应仔细考虑使用事件标记。在高频率代码路径中注入标记可能会引入较高的 CPU 开销。因此,在某些驱动程序版本上,仅当 Nsight Aftermath GPU 崩溃转储监视器在系统上运行时,事件标记功能才可用。此要求适用于 DX12 的 R495 到 R530 驱动程序和 DX11 的 R495+ 驱动程序。无需在监视器中进行任何 Aftermath 配置。它仅用作一个加密锁,以确保 Aftermath 事件标记不会影响最终用户系统上的应用程序性能。
对于 Vulkan 应用程序,VK_NV_device_diagnostic_checkpoints
扩展提供了类似的功能。
源着色器调试信息
为了将活动或错误着色器 Warp 的着色器指令地址映射到高级着色器源,着色器需要使用调试信息进行编译。由于着色器编译是一个两步过程 - 从着色器源(例如 HLSL 或 GLSL)编译到中间着色器语言表示形式(例如 DXIL 或 SPIR-V),以及图形驱动程序级别的着色器 IL 编译到 GPU 执行的实际微代码 - 因此需要两个级别的调试信息才能完成此类映射。本节介绍如何使用 Microsoft DirectX Shader Compiler 或 Vulkan SDK 工具链进行着色器编译,使用适合 Aftermath GPU 崩溃转储检查器使用的调试信息编译着色器源代码。
需要通过 Nsight Aftermath GPU 崩溃转储监视器设置 或使用 Nsight Aftermath SDK 时的 Aftermath 功能标志来启用微代码级别的着色器调试信息的生成。有关更多信息,请参阅 Nsight Aftermath SDK 文档。
要在 Nsight Graphics 中分析崩溃转储时启用着色器指令映射,必须通过设置 搜索路径设置 来提供调试信息,如 配置 GPU 崩溃转储检查器 中所述。
对于 D3D12,Aftermath 支持使用 Microsoft DirectX Shader Compiler (dxc.exe) 编译具有调试信息的着色器的以下变体
编译和使用完整着色器 Blob:使用调试信息编译着色器。在运行应用程序时使用完整(即,未剥离)的着色器二进制文件,并在检查 GPU 崩溃转储时通过将存储编译结果的磁盘位置添加到 着色器二进制文件 搜索路径,使其可供 Nsight Graphics 访问。
示例命令行可能如下所示
dxc -Zi [..] -Fo shader.bin shader.hlsl
编译和剥离: 使用调试信息编译着色器,然后剥离调试信息。在运行应用程序时使用剥离的着色器二进制文件,并在检查 GPU 崩溃转储时使剥离和未剥离的文件都可供 Nsight Graphics 访问。将剥离文件的磁盘位置添加到 着色器二进制文件 搜索路径,并将未剥离文件的磁盘位置添加到 单独的着色器调试信息 搜索路径。
示例命令行可能如下所示
dxc -Zi [..] -Fo full_shader.bin shader.hlsl dxc -dumpbin -Qstrip_debug -Fo shader.bin full_shader.bin
使用单独的调试信息编译: 使用调试信息编译着色器,并指示编译器将调试元数据存储在单独的着色器调试信息文件(着色器 PDB 文件)中。在检查 GPU 崩溃转储时,使着色器二进制文件和着色器调试信息文件都可供 Nsight Graphics 访问。将着色器二进制文件的磁盘位置添加到 着色器二进制文件 搜索路径,并将着色器调试信息文件的磁盘位置添加到 单独的着色器调试信息 搜索路径。
示例命令行可能如下所示
dxc -Zi [..] -Fo shader.bin -Fd debugInfo\ shader.hlsl
如果应用程序即时编译着色器,则需要以类似的方式将着色器二进制 Blob 存储到磁盘,以便在检查 GPU 崩溃转储时它们可供 Nsight Graphics 访问。
注意
旧版 Microsoft DirectX fxc.exe 着色器编译器生成的 DX 字节码着色器不支持 IL 级别或源级别的着色器映射。
对于 Vulkan,Aftermath 支持生成具有调试信息的 SPIR-V 着色器代码的以下变体
使用 Vulkan SDK 的着色器编译工具链的 glslangValidator 工具进行编译。示例命令行可能如下所示
glslangValidator -V -g -o shader.spv shader.vert
使用 Microsoft DirectX Shader Compiler 进行编译。示例命令行可能如下所示
dxc -spirv -Zi [..] -Fo shader.spv shader.hlsl
在运行应用程序时使用完整(即,未剥离)的 SPIR-V 着色器二进制文件,并在检查 GPU 崩溃转储时通过将存储它们的磁盘位置添加到 着色器二进制文件 搜索路径,使其可供 Nsight Graphics 访问。
注意
剥离和未剥离的 SPIR-V 文件对不支持源级着色器映射。对随附剥离的 SPIR-V 着色器的应用程序的着色器源映射感兴趣的用户可以使用 Nsight Aftermath SDK 提供的 GPU 崩溃转储解码功能,并实现他们自己的崩溃转储解码工具。
Aftermath 着色器哈希
着色器文件没有命名约定,开发人员可以自由决定他们使用什么文件名和扩展名来存储他们的 DirectX 着色器二进制文件、单独存储的“pdb”文件或 SPIR-V 着色器文件。此外,图形驱动程序不知道这些文件。因此,Aftermath 使用着色器代码哈希来标识应用程序加载的着色器二进制文件。
在搜索显示 DXIL/SPIR-V 指令或源映射信息所需的信息时,会将配置的 着色器二进制文件搜索路径 中找到的着色器二进制文件与这些哈希进行比较。
对于想要计算其文件哈希的开发人员,Nsight Aftermath SDK 提供了两个 API
对于 D3D12/DXIL 着色器,请使用
GFSDK_Aftermath_GetShaderHash
函数。对于 Vulkan/SPIR-V 着色器,请使用
GFSDK_Aftermath_GetShaderHashSpirv
函数。
这两个函数和其他信息都可以在 GFSDK_Aftermath_GpuCrashDumpDecoding.h
头文件或 Nsight Aftermath SDK 文档 中找到。
Aftermath 着色器调试信息标识符
Aftermath 使用唯一的标识符来标识 NVIDIA D3D12 或 Vulkan 驱动程序生成的低级调试着色器调试信息,用于将着色器微代码指令映射到 DXIL 或 SPIR-V 指令。
在搜索将微代码指令映射到 DXIL 或 SPIR-V 指令所需的信息时,会将配置的 NVIDIA 着色器调试信息搜索路径 中找到的调试信息文件与着色器调试信息标识符进行比较。
Nsight Aftermath GPU 崩溃转储监视器使用着色器调试信息标识符为它创建的调试信息文件生成唯一的基名称和 .nvdbg
扩展名,例如,A9B36BBAFFD79B51-000001BB689D5060-*.nvdbg
。使用 Nsight Aftermath SDK 的开发人员可以自由选择为通过 GFSDK_Aftermath_ShaderDebugInfoCb
回调检索到的 NVIDIA 调试信息创建的文件的命名约定。但是,他们也被鼓励在其使用的文件名约定中包含着色器调试信息标识符。这可能有助于了解为什么可能无法使用当前的 搜索路径 设置找到调试信息。
Nsight Aftermath SDK 提供了 GFSDK_Aftermath_GetShaderDebugInfoIdentifier
API,可用于计算包含着色器调试信息数据的内存缓冲区的着色器调试信息标识符。
此函数和其他信息都可以在 GFSDK_Aftermath_GpuCrashDumpDecoding.h
头文件或 Nsight Aftermath SDK 文档 中找到。
BETA 着色器调试器设置
应用程序设置
在尝试运行 Shader Debugger 之前,您需要确保您的应用程序与之兼容。可能干扰引擎功能的其中一个方面是任何“看门狗”定时器,它们监视线程以确保它们正在取得进展。当在断点处停止时,渲染线程将不会取得任何进展,看门狗可能会尝试关闭应用程序。这可能会导致 GPU 挂起,并且需要硬重启才能恢复功能。我们正在研究使之更易于使用的方法,但与帧调试类似,最好禁用任何看门狗定时器。
着色器设置
Shader Debugger 能够 JIT(即时)重新编译您的着色器,以便您可以调试具有完整调试信息的非优化代码。这允许您像往常一样构建优化的着色器,在您查找要调试的问题时获得完整的“发布”性能,并且仅在您单步执行代码时才切换到“调试”性能。为了做到这一点,您需要在 glslangValidator 中使用“-g”标志编译着色器,以便您的原始源代码包含在 SPIR-V 文件中。
当 Shader Debugger 重新编译着色器时,它将尝试在与您的主源文件相同的目录中查找任何包含文件。我们正在考虑在即将发布的版本中添加一些修改编译标志(包括宏定义)的功能。如果您不包含源代码,或者从源代码到 SPIR-V 的编译 JIT 过程失败,Shader Debugger 仍然会编译 SPIR-V 到微代码,并禁用优化和包含调试信息,以便提供合理的调试体验。
GPU 设置
Shader Debugger 支持两种不同的机器配置:在一台系统上使用两个 GPU 进行本地调试,或使用两台系统(每台系统只有一个 GPU)进行远程调试。这是必要的,因为硬件不支持非 CUDA 工作负载的指令级抢占,因此当 GPU 上的着色器命中断点时,它将停止所有渲染,包括桌面。
注意
Shader Debugger 需要在 Windows 上以管理员身份运行,或者在 Linux 上以超级用户身份(通过 sudo)运行。当本地运行时,这意味着 Nsight Graphics 主机必须以这些权限运行,当远程运行时,Nsight Graphics Remote 监视器必须具有这些权限。我们正在努力在未来的版本中移除这一要求。
注意
在 Windows 上,需要在调试目标系统上增加 TDR 延迟,以便您可以停留在断点处较长时间。调试器将检查当前设置是否足够,并在必要时协助修改设置。增加的超时值可能会在 GPU 异常发生时,以及尝试通过 Aftermath 收集转储时,导致设备重置的显著延迟。您可以使用 regedit 将您的 TdrDelay 注册表项重置为更典型的值,例如 2 秒。有关更多详细信息,请查看 https://learn.microsoft.com/en-us/windows-hardware/drivers/display/tdr-registry-keys。
单系统调试
为了运行 Shader Debugger,您需要在其中一个 GPU 上运行您的应用程序,并在第二个 GPU 上运行 Nsight Graphics 主机。运行您的应用程序的 GPU 需要是 Ampere 微架构或更新的架构。运行 Nsight 主机的 GPU 可以是任何 GPU,NVIDIA 或其他供应商,只要您可以在其上安装最新的驱动程序。除此之外,Windows 与 Linux 之间还有一些特定的设置细节。
注意
当您运行应用程序时,您可能需要更改您选择在哪个 GPU 上运行的方式。大多数应用程序会选择“最强大的”GPU 来运行,但如果那是您想要在其上运行主机的 GPU,那么您将需要调整您的应用程序以在未运行主机的 GPU 上创建设备。
如果您在确定您的应用程序或 Nsight Graphics 主机正在哪个 GPU 上运行时遇到问题,您可以使用命令提示符中的 nvidia-smi 来显示给定进程正在哪个 GPU 上运行。

Windows 设置
Nsight Graphics 能够自动设置您的系统以进行单系统、多 GPU 调试。如果您在台式机系统上运行,这也意味着它将设置您的 2 个 GPU 以在混合模式下运行,类似于您在笔记本电脑系统上运行时的情况:您的应用程序将在 GPU1 上运行,同时在 GPU0 上的窗口中显示。
对于主机,有些功能(如 Focus Picker)需要 OpenGL 上下文。如果未正确设置,这可能会在与您的应用程序相同的 GPU 上运行,导致调试器 UI 在断点处停止时挂起。您可以使用上面提到的 nvidia-smi 工具来确认这一点。
为了更改主机正在运行的 GPU,您可以使用 Windows 设置小程序,然后选择“显示”和“图形”。

单击“浏览”按钮以选择 ngfx-ui.exe 主机应用程序,根据您的安装位置,您将可以选择在其上运行的 GPU。

Linux 设置
为了在 Linux 上运行,您需要运行 2 个独立的 X 服务器:每个 GPU 一个。以下是您可以使用 LightDM 和 Xfce 执行此操作的步骤
使用 apt/apt-get 安装 lightdm 和 xfce
确保您有 2 套键盘、鼠标和显示器连接到系统
使 lightdm 成为默认 DM(这对于 DualX 设置和 x11vnc 也是必需的)
sudo dpkg-reconfigure gdm3
默认情况下,所有设备都连接到 seat0
使用“loginctl seat-status seat0”查看所有使用 seat0 的设备
将 GPU、键盘和鼠标连接到 seat1(或相应的 USB 端口)
loginctl attach seat1 /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:10.0/0000:04:00.0/drm/card1
loginctl attach seat1 /sys/devices/pci0000:00/0000:00:14.0/usb1/1-4
loginctl attach seat1 /sys/devices/pci0000:00/0000:00:14.0/usb1/1-5
完成此操作后,您需要重新启动系统。
多系统调试
在 Windows 和 Linux 上设置多系统调试类似。
您需要在您将运行图形应用程序的系统上以管理员身份(Windows)或超级用户身份(Linux)运行 Nsight Graphics Remote Monitor (nv-nsight-remote-monitor)。
在第二台系统上运行 Nsight Graphics 主机 (ngfx-ui)。
从主机上,设置远程连接,包括要连接的机器名称或 IP 地址。

更改“应用程序可执行文件”字段以指向您要运行的应用程序。请注意,此字段和“工作目录”字段将相对于目标机器,而不是本地机器。
更新您可能需要的任何命令行参数或环境变量。
选择 Shader Debugger (Beta) 活动,然后按对话框右下角的 启动 Shader Debugger 按钮。
主机应在您的目标应用程序完成启动后自动附加到它。
示例
Nsight Graphics 附带了一系列示例,可以帮助您了解如何使用该工具。要访问这些示例,请选择 帮助 > 示例 并选择要打开的示例。选择后,将创建一个示例项目,并且连接对话框将弹出,允许您使用和检查该示例。某些示例还包括示例报告供您学习。
请注意,示例也是区分 Nsight Graphics 问题与系统问题的有效工具。如果示例在您那里无法无问题地运行,则很可能存在需要诊断的系统问题。
活动
Nsight Graphics 支持多种活动,以针对您在开发过程中的特定点的需求来调整您的工作负载。
帧调试器 - 允许您按每个绘制调用调试帧。您可以查看顶点着色器、像素着色器和管线状态。
生成 C++ 捕获 - C++ 捕获活动允许您将应用程序帧导出为 C++ 代码,以便作为独立的应用程序进行编译和运行,以供后续分析、调试、性能分析、回归测试和编辑-编译实验,按每个绘制调用调试帧。您可以查看顶点着色器、像素着色器和管线状态。
GPU 跟踪分析器 - 支持 SM 工作负载的分析。
BETA Shader Debugger - 允许您在 Vulkan 应用程序中的着色器在 GPU 上执行时对其进行调试。
帧调试器
帧调试器活动允许
实时检查渲染调用;
交互式检查 GPU 管线状态,包括绑定纹理、几何体和无序访问视图的可视化;
像素历史记录显示影响给定像素的所有操作;
着色器性能分析以探索着色器性能;
C++ 捕获导出,用于离线协作和分析。
何时使用帧调试器活动
帧调试器活动提供了一套全面的工具,用于发现应用程序渲染或一般操作方面的问题。此活动使您可以检查事件、API 状态、资源值和依赖关系,以了解您的应用程序可能存在问题的位置。在以下情况下使用此活动
您有渲染精度问题
您预计您可能存在同步问题
您想探索您的应用程序着色器的性能 (DX12 和 Vulkan)
帧调试器活动支持 Nsight Graphics 通常支持的所有 API。
基本工作流程
要开始此活动,请从连接对话框中选择 帧调试器。

帧调试器活动的基本工作流程是捕获应用程序,然后导航应用程序正在提交/使用的事件、数据和资源,以识别您的问题。
无论您是在 CPU 还是 GPU 上进行调试,任何调试过程的第一步都是缩小您需要分析的数据集范围,以了解您的问题。通常,这意味着您需要滚动到 时间轴 或 事件查看器 中特定的感兴趣事件。由于 Nsight Graphics™ 将向您展示每个绘制调用的渲染贡献,因此查看 HUD 或当前目标视图将使您了解您的渲染可能在哪里出错。另一种选择是使用像素历史记录实验来自动识别与特定纹理更新相关的绘制调用。
从那里,您将需要利用您对图形管线的知识来尝试了解可能导致问题的原因。一些要问自己的问题
这是一个几何问题吗?如果是,是变换前问题还是变换后问题?
这是一个混合问题吗?
这是一个同步问题吗?
在某些情况下,可能存在多种问题加剧给定问题。隔离症状可能具有挑战性,但有效使用工具可以增加您正朝着正确方向前进的信心。
生成 C++ 捕获
C++ 捕获 活动允许您将应用程序帧导出为 C++ 代码,以便作为独立的应用程序进行编译和运行,以供后续分析、调试、性能分析、回归测试和编辑-编译实验。
何时使用生成 C++ 捕获活动
虽然可以在帧调试期间收集 C++ 捕获,但 C++ 捕获活动提供了一个集中的活动来简化捕获的创建。不必要的分析子系统被关闭,以便允许最快和最强大的应用程序捕获。此活动是保存应用程序快照(冻结在时间中)的绝佳方式。在以下情况下使用此活动
您想保存一个确定性的应用程序以进行后续性能分析。
您想保存应用程序工作方式的参考点。
您想与 NVIDIA 的开发工具或驱动程序团队共享一个最小的可重现示例,以方便错误报告。
生成 C++ 捕获活动支持 Nsight Graphics 通常支持的所有 API。
基本工作流程
要开始此活动,请从连接对话框中选择 生成 C++ 捕获。

应用程序运行后,生成 C++ 捕获 按钮将在主工具栏上可用。

一旦捕获开始,目标应用程序将暂时暂停,并显示一个进度对话框,详细说明导出到 C++ 过程的步骤。完成后,C++ 项目将被写入磁盘,应用程序将恢复。

默认情况下,保存目录与当前项目并排放置。如果当前未加载任何项目,则使用默认保存目录(请参阅 选项 > 环境 > 默认文档文件夹)。
除了 C++ 项目外,代码生成过程还会生成一个 ngfx-cppcap 文件,其中包含其他信息和实用程序。这些 ngfx-cppcap 文件会自动与当前项目关联,并且可以稍后重新打开。

ngfx-cppcap 文件的附加功能包括
从原始应用程序拍摄的捕获屏幕截图。
有关捕获的应用程序及其原始系统的信息。
有关捕获的 API 流的统计信息。
无需打开生成的 Visual Studio 项目即可构建 C++ 捕获的实用程序。
启动已编译应用程序的实用程序
执行 按钮将启动已编译的可执行文件。
连接… 按钮将填充一个新的连接对话框,允许您在生成的捕获上运行特定的活动。
持久保存在此文件中的用户评论。
使用已保存的捕获
要使用已保存的捕获,请在生成的目录中使用 Visual Studio 的 打开文件夹 功能。执行此操作后,Visual Studio 将读取 CMakeLists.txt 并允许您构建和运行可执行文件。或者,如果您使用的 Visual Studio 版本早于 2017,并且它不支持本机 CMake 加载,则可以使用独立的 CMake 工具为您的 Visual Studio 版本生成项目。
这些解决方案文件包含许多生成的源文件。
Main.cpp
— 这是调用所有初始化代码、创建资源以及在消息循环中调用每个帧部分的位置。Resources NN .cpp
— 根据要创建的资源数量,将有多个Resources NN.cpp
文件,每个文件都有一个CreateResourcesNN
调用,它们将构造场景中使用的所有资源(设备、纹理、着色器等)。这些在Main.cpp
中在消息循环中重放帧之前被调用。FrameSetup.cpp
— 此文件包含所有状态设置调用,用于将 API 状态设置为帧开始时的适当值,包括绑定了哪些缓冲区、启用了哪些着色器等。FrameNPartMM.cpp
— 在 Direct3D 和单线程 OpenGL 捕获中,这些文件包含 API 函数,每个函数都命名为RunFrameNPartMM()
,用于重放帧。它被拆分为多个文件,以便生成的代码更易于使用。这些函数在Main.cpp
中的消息循环中按顺序调用。注意
在这种情况下,
N
和MM
都是在生成的多个文件中数字的占位符。Frame N
通常将是Frame0
,因为只捕获单个帧,而Part MM
通常将在00-05
范围内,具体取决于帧中的 API 调用数量。ThreadLLFrameNPartMM.cpp
— 在多线程 OpenGL 捕获中,这些文件包含 API 函数,每个函数都命名为ThreadLLRunFrameNPartMM()
,用于重放帧。这些函数对应于每个线程在帧期间完成的工作。这些函数由它们各自的线程调用并同步,以按捕获的相同顺序重放保存的事件。ReadOnlyDatabase.cpp
— 这是一个辅助类,用于访问存储在data.bin
文件中的资源数据。它通过代码中的GetResource()
调用进行访问。Helpers.cpp
— 这些函数在整个重放器中用于各种转换和访问ReadOnlyDatabase
。Threading.cpp
— 此文件包含辅助函数和类,用于管理项目中使用的线程。
构建并运行项目。
为不同的平台构建已保存的捕获
对于 Vulkan 应用程序,Nsight Graphics 当前支持为不同的平台构建和运行已保存的捕获,例如,您可能在 Windows 上保存了一个捕获,但希望在嵌入式 Linux 上运行它。
Nsight Graphics 尽最大努力支持跨平台转换,但是 Vulkan 之外存在一些特定于平台的考虑因素和机制,并且某些特定于平台的扩展和功能可能无法为不同的平台正确转换。因此,无法确保跨平台转换捕获的运行时兼容性。
要使用在不同平台上保存的捕获,您只需通过 文件 > 打开文件… 在 Nsight Graphics 中打开 ngfx-cppcap 文件,然后单击 构建 按钮。我们将自动为您确定默认编译选项。
或者,您可以从命令行手动构建已保存的捕获,但是您需要显式指定编译选项
NV_TARGET_PLATFORM:选择要为其构建的目标平台
NV_WINSYS:选择要与图形 API 交互的窗口系统类型
NV_SDKDIR:指定 SDK 目录的路径(仅在为嵌入式 Linux 构建时需要)
示例
为嵌入式 Linux 构建已保存的捕获并使用 x11 作为窗口系统
mkdir -p int && cd int && cmake -G "Unix Makefiles" -DNV_INSTALL_FOLDER=bin -DNV_TARGET_PLATFORM=LINUX_EMBEDDED -DNV_WINSYS=x11 -DNV_SDKDIR=<SDK_PATH> .. && cmake --build . --config RelWithDebInfo --target install -- -j13
为 Windows 构建已保存的捕获
MD int && CD int && cmake -G "Visual Studio 16 2019" -A x64 -DCMAKE_GENERATOR_INSTANCE="C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional" -DNV_INSTALL_FOLDER=bin .. && cmake --build . --config RelWithDebInfo --target install
为 Linux 桌面构建已保存的捕获并使用 xcb 作为窗口系统
mkdir -p int && cd int && cmake -G "Unix Makefiles" -DNV_INSTALL_FOLDER=bin -DNV_TARGET_PLATFORM=LINUX_DESKTOP -DNV_WINSYS=xcb .. && cmake --build . --config RelWithDebInfo --target install -- -j13
更改资源
如果您想更改资源(例如,交换不同的纹理),您可以通过在 ResourcesNN.cpp
文件中查找有问题的纹理来更改构造参数。纹理可以通过大小和/或格式进行匹配。找到纹理的变量后,在 FrameSetup.cpp
文件中查找该名称。这将包含锁定纹理的源代码行,调用 GetResource()
以从 ReadOnlyDatabase
检索数据,然后调用 memcpy(…)
以将数据链接到纹理。您可以将对 ReadOnlyDatabase
的调用替换为从所选文件读取的调用,以加载备用纹理。
更改绘制调用
如果您想更改给定绘制调用的状态,您可以通过在 Nsight Graphics 中重放捕获并滚动以查找您要检查的调用来定位绘制调用。在 FrameNPartMM.cpp
文件中搜索 Draw NN,其中 NN 是 Nsight Graphics 在时间轴上显示的基于 0 的绘制调用索引。这样做会将您带到该绘制调用的源代码行,从这里,您可以在该调用之前添加任何状态更改。或者,您也可以通过注释掉包含绘制调用的源代码调用来禁用该特定调用。
参数
-repeatN
— 此设置使 Nsight Graphics 能够在正常的架构工作流程中使用序列化捕获。N 设置指示重复整个捕获的次数;默认设置为 -1,这将使捕获在无限循环中运行。-noreset
— 此设置控制上下文状态和所有资源是否重置为其帧开始值。指定此设置后,将跳过所有帧恢复操作,从而避免与它们相关的性能成本。请注意,如果渲染帧对先前帧的结果具有数据依赖性,则这可能会引入渲染错误。此外,请注意,虽然不常见,但跳过帧恢复确实有可能导致应用程序崩溃。
从命令行生成 C++ 捕获
要了解如何生成 C++ 捕获,请首先使用 --help-all
参数启动 CLI。这将显示 CLI 具有的所有可用选项。
CLI 可以启动应用程序以生成 C++ 捕获,格式如下
ngfx.exe --activity="Generate C++ Capture" [general_options] [Generate_C++_Capture_activity_options]
有关常规选项的详细信息,请参阅 CLI 参数详细信息,生成 C++ 捕获活动选项
选项 |
描述 |
---|---|
–wait-seconds arg |
捕获帧之前的等待时间(以秒为单位)。 |
–wait-hotkey |
预计捕获将通过按下运行应用程序上的 目标应用程序捕获热键 来触发。 如果启用,则关于等待秒数的选项将被忽略。 |
示例
ngfx.exe --activity="Generate C++ Capture" --platform="Windows" --exe=D:\Bloom\bloom.exe --wait-seconds=10
启动应用程序以在等待指定的秒数后自动生成 C++ 捕获。
ngfx.exe --activity="Generate C++ Capture" --platform="Windows" --exe=D:\Bloom\bloom.exe --wait-hotkey
启动应用程序以手动触发捕获,以便生成 C++ 捕获。CLI 正在等待从目标端触发的捕获(按下运行应用程序上的 目标应用程序捕获热键)。
ngfx.exe --activity="Generate C++ Capture" --platform="Windows" --project="D:\Projects\Bloom.ngfx-proj" --wait-seconds=10 --no-timeout
启动应用程序以在等待指定的秒数后自动生成 C++ 捕获,但使用从 Nsight Graphics 项目读取的启动选项和活动选项。此外,
--no-timeout
禁用所有超时,以防此应用程序可能需要很长时间才能启动/捕获/。
GPU 跟踪分析器
GPU 跟踪分析器 活动运行一个低级性能分析器,开发人员可以使用它来优化 NVIDIA Turing 及更高版本的硬件的应用程序。它在实时应用程序上运行,并捕获整个帧执行过程中 GPU 单元的利用率。GPU 跟踪报告可能有助于检测 GPU 管线中的瓶颈,以及应用程序未充分利用 GPU 的区域。
何时使用 GPU 跟踪分析器活动
GPU 跟踪活动为各种 GPU 单元提供详细的性能信息。
在以下情况下使用此活动
您希望了解 GPU 单元的利用率并搜索吞吐量瓶颈。
您希望了解跨队列的同步对象是如何执行的。
您想搜索您的应用程序未充分利用 GPU 的机会。
您怀疑您的引擎将受益于异步计算。
GPU 跟踪活动当前支持在 NVIDIA Turing 架构及更高版本上分析应用程序。
系统设置
必须配置目标系统以允许 GPU 跟踪收集性能指标。请参阅 此链接 上的文档,以获取有关如何执行此操作的指南。
基本工作流程
要开始此活动,请从连接对话框中选择 GPU 跟踪。

设置您的应用程序以进行连接(请参阅 如何启动并连接到您的应用程序 以获取更多信息)。

指定 开始于 条件。此参数定义跟踪的开始方式和时间。
手动触发: 指定跟踪将由用户通过主机应用程序或运行应用程序上的 目标应用程序触发热键 手动触发。
帧计数: 跟踪将在经过选定数量的帧后自动开始。
提交计数: 跟踪将在执行选定数量的提交后自动开始。指定 0 将捕获所有提交。
经过时间: 跟踪将在自第一次 present 或 submit 调用以来 CPU 上经过选定时间量后发生的第一次 present 或 submit 调用时自动开始。
如果您希望在 Top-Down Calls 表和其他着色器性能分析器视图中显示每 ~10 微秒间隔的源级别着色器性能,请启用 实时着色器性能分析器。着色器性能是通过 SM 硬件中的高速采样性能分析器收集的,这不会在运行时产生着色器执行开销,并且仅消耗 PCIe TX 带宽(以及性能计数器)。禁用后,将收集更详细的 SM 和 L1TEX 性能计数器列表。此设置与带有“火焰”图标的时间轴指标兼容。需要启用“收集着色器管线”。此功能在 NVIDIA Ampere GA10x 及更新的架构上可用。
指定跟踪的 最大持续时间。此参数定义目标应用程序上跟踪的最大持续时间。
指定 限制为 条件。此参数指定跟踪是否应限制为最大持续时间以外的其他事件。此参数还会影响在满足 开始于 条件后跟踪何时开始。
最大帧数: 除了最大持续时间外,跟踪还将限制为设定的帧数。指定此项将导致时间轴上包含帧分隔符。一旦满足 开始于 条件,跟踪将在下一帧的开头开始。
最大提交数: 除了最大持续时间外,跟踪还将限制为设定的提交数。一旦满足 开始于 条件,跟踪将在下一次提交时开始。
无: 跟踪将仅受最大持续时间限制。一旦满足 开始于 条件,跟踪将在下一次提交时开始。
注意
GPU 跟踪消耗大量内存,尤其是在复杂的帧中。您需要确保通过收集较长时间,有足够的内存来收集所有内容。
示例 |
在手动触发后启动跟踪可能在分析交互式应用程序时很有用。除了允许在任意时间点触发跟踪外,它还使与跟踪之间的应用程序进行交互成为可能。 |
示例 |
在选定数量的提交后自动启动跟踪可能在分析非交互式应用程序时很有用。跟踪将被自动触发,而无需用户执行任何手动操作。 |
启动或附加到您的应用程序。(请参阅 如何启动并连接到您的应用程序 以获取更多信息。)
应用程序运行后,各种指示器将出现在应用程序窗口内部,在 GPU 跟踪目标 HUD 中。
数据收集: 指示数据收集的当前状态
正在初始化: 目标正在初始化。
不可用: 跟踪不可用,可能是由于错误,或者应用程序未在 NVIDIA GPU 上运行。
就绪: 目标已就绪,等待用户触发它。
等待中: 目标已就绪,等待满足启动条件。
正在跟踪: 目标正在收集数据。
独立翻转 (仅限窗口): 指示当前是否采用 Windows 上的最佳呈现路径 (I-Flip)。I-Flip 在全屏独占模式下可用,或者在 GPU+驱动程序支持多平面覆盖 (MPO) 时在窗口模式下可用。
循环位置: 指示循环 HUD 位置的当前热键。如果 HUD 隐藏了应用程序的重要部分,则可以使用它来更改 HUD 的位置。
d. 后台编译: 指示 图形驱动程序中的后台着色器编译 的当前状态。如果您尝试分析稳定的场景(不移动的相机),等待后台编译达到“非活动”状态将产生更稳定和有代表性的性能数字。
非活动: 没有后台着色器编译正在进行中。
活动: 后台着色器编译正在进行中。
如果应用程序成功连接,则进程名称将出现在窗口的右下角。如果您将跟踪配置为在 手动触发 后启动,那么您可以通过单击 收集 GPU 跟踪 按钮或按运行应用程序上的 目标应用程序触发热键 来收集新的跟踪。如果您将跟踪配置为在满足给定条件后自动启动,那么只需等待收集完成即可。

注意
GPU 跟踪收集所有 GPU 活动。因此,最好在远程机器上运行应用程序和/或在捕获时关闭所有其他应用程序。
注意
为了获得最佳精度,建议您在全屏模式下运行应用程序,等待 独立翻转 启用(仅限 Windows),并关闭 V-Sync。您可以从您的应用程序中关闭 V-Sync,或者在活动对话框中将 V-Sync 模式 设置为 关闭 (这是默认选项)。
注意
默认情况下,GPU 跟踪将在捕获之前将 GPU 时钟锁定为基本时钟。建议使用此方法,以便连续的报告具有可比性。
收集跟踪后,将出现一个弹出窗口,允许您打开报告并选择性地终止应用程序。

注意
建议您在收集后关闭应用程序,以便在浏览报告时释放系统的内存。
如何解释报告
在解释报告时,请参考 GPU 跟踪 UI 部分,以获取有关如何解释提供的每条信息的信息。需要考虑的事项
我是否受 GPU 限制?
我是否正在使用异步计算?
我是否有异步计算的机会?
哪些工作负载占用时间最多?
对于这些工作负载,我的占用率是否很低?
如果您确定您有异步计算的机会,但您目前没有使用(或实现)异步计算,您可能需要调查您的引擎,以了解在何处或如何实现它。
如果您确定您有占用率低的昂贵工作负载,您将需要分析您的着色器,以寻找减少工作量或减少寄存器/内存使用量的机会,从而提高占用率。
从命令行生成 GPU 跟踪捕获
要了解如何生成 GPU 跟踪捕获,请首先使用 --help-all
参数启动 CLI。这将显示 CLI 拥有的所有可用选项。
CLI 可以启动应用程序以生成 GPU 跟踪捕获,形式如下
ngfx.exe --activity="GPU Trace" [general_options] [GPU_Trace_activity_options]
有关常规选项详细信息和 GPU 跟踪活动选项,请参阅CLI 参数详细信息
选项 |
描述 |
---|---|
|
在生成 GPU 跟踪捕获之前等待的帧数。 |
|
在生成 GPU 跟踪捕获之前等待的时间(秒)。 |
|
预计通过在正在运行的应用程序上按下目标应用程序捕获热键来触发捕获。 如果启用,则有关等待帧数/秒数的选项将被忽略。 |
|
生成 GPU 跟踪捕获后自动导出指标数据。 |
|
要捕获多少帧(1-15)(可能受内存可用性限制)。 |
|
选择哪个架构来配置特定于架构的选项。 注意:可在帮助消息 ( |
|
选择要用于给定架构的指标集索引。 注意:可在帮助消息 ( |
|
选择要用于给定架构的指标集名称。 注意:可在帮助消息 ( |
|
启用多通道指标,这将收集多个通道上的附加数据。 |
|
包含每个架构配置的 json 文件的路径。 该文件应结构化为顶级数组,其中包含指定“architecture”、“metric-set-name”或“metric-set-id”和“multi-pass-metrics”的对象,例如 [
{
"architecture": "Turing",
"metric-set-name": "Throughput Metrics",
"multi-pass-metrics": "true"
},
{
"architecture": "Ampere GA10x",
"metric-set-id": "0"
}
]
注意:可在帮助消息 ( |
示例
ngfx.exe --activity="GPU Trace" --platform="Windows" --exe=D:\Bloom\bloom.exe --wait-seconds=10 --architecture=Ada --metric-set-id=1
启动应用程序以在等待指定的秒数后自动生成 GPU 跟踪捕获,并在 Ada GPU 架构上使用指标集索引 1。
ngfx.exe --activity="GPU Trace" --platform="Windows" --exe=D:\Bloom\bloom.exe --wait-hotkey --auto-export
启动应用程序以手动触发生成 GPU 跟踪捕获。 CLI 正在等待从目标端触发的捕获(在正在运行的应用程序上按下目标应用程序捕获热键)。捕获完成后,CLI 还会打开生成的 GPU 跟踪捕获并导出指标数据。
ngfx.exe --activity="GPU Trace" --platform="Windows" --project="D:\Projects\Bloom.ngfx-proj" --wait-seconds=10
启动应用程序以在等待指定的秒数后自动生成 GPU 跟踪捕获,但使用从 Nsight Graphics 项目读取的启动选项和活动选项。
BETA 着色器调试器
Nsight Graphics 提供完全硬件加速的 Shader Debugger,用于调试在 GPU 上执行的着色器。 这可以在 Ampere 及更高版本的硬件上使用,并且在您的实时应用程序上运行,而不是像 Frame Debugger 活动中那样在捕获/重放场景中运行。 Shader Debugger 的功能类似于 CPU 源代码调试器,包括能够在源代码中设置断点,并根据变量进行可选条件判断,从当前 PC 步入/步过/步出,通过“局部变量”和“监视”窗口查看着色器程序状态,以及通过“Warp 信息”和“焦点选择器”窗口选择要调试的 Warp/线程。
注意
着色器调试目前仅支持 Vulkan API。
何时使用着色器调试器活动
每当您需要更好地了解着色器代码如何在 GPU 上执行时,您都可以使用 Shader Debugger 活动。
您刚刚编写了一个新的代码段,并希望逐步执行它,以确保您的算法按预期运行。
您看到了渲染异常,并希望更好地了解可能导致它的原因。
基本工作流程
要启动此活动,请从“连接”对话框中选择 Shader Debugger。

Shader Debugger 活动的基本工作流程是启动您的应用程序,然后使用“着色器视图”选择您感兴趣的调试的管道和着色器。 选择后,您可以在着色器中设置断点并逐步执行代码,检查变量值等。
系统跟踪
系统跟踪活动是一个特殊活动,它连接到 Nsight Systems™ 工具。 请参阅预期工作流程部分,以了解 Nsight Systems 如何融入您的性能分析和优化工作流程。
当系统上存在兼容版本的 Nsight Systems 时,系统跟踪活动提供与 Nsight Systems 的连接,以使用来自 Nsight Graphics 连接对话框的设置自动填充外部工具上的系统跟踪活动。 这允许在一个位置轻松保存项目属性。
当系统上不存在兼容版本的 Nsight Systems 时,系统跟踪活动提供下载该工具的便捷链接。 必须重新启动 Nsight Graphics 才能发现任何新安装的 Nsight Systems 版本。
用户界面参考
本节深入介绍了 Nsight Graphics 提供的所有用户界面元素和视图。
应用程序配置和活动选择 UI
启动选项卡
启动选项卡允许启动应用程序进行分析。 您可以在此处添加基本的进程信息以启动,然后连接到您希望分析的应用程序。
此选项卡具有以下控件
应用程序可执行文件 - 指定要启动的根应用程序。 请注意,这可能不是您希望分析的最终应用程序。 使用 $(ApplicationExecutable) 或其父目录 $(ApplicationDir) 引用此字段。
工作目录 - 应用程序将在其中启动的目录。 默认情况下,工作目录将设置为应用程序目录。 使用 $(WorkingDir) 引用此字段。
命令行参数 - 指定要传递给应用程序可执行文件的参数。
环境 - 要在启动的应用程序中设置的环境变量。
自动连接 - 指定是否应自动连接到启动的应用程序。 如果启动的应用程序是创建您最终希望分析的进程的启动器,请将其设置为“否”。
以下变量可用于“启动”选项卡中的任何字段
$(ProjectDir) - 指的是当前项目保存的目录。
$(ApplicationExecutable) - 指的是“应用程序可执行文件”字段中的值。
$(ApplicationDir) - 指的是“应用程序可执行文件”的父文件夹。
$(WorkingDir) - 指的是“工作目录”字段中的值。
注意
多个字段都有一个选择器,允许您循环浏览最近使用的条目。 这对于循环浏览常用配置非常有用。

附加选项卡
要附加到应用程序,必须先通过“启动”选项卡启动它。 此页面将列出启动的应用程序以及应用程序启动的任何子应用程序。
注意
如果主机因任何原因断开连接,并且目标恰好仍在运行,您可以使用附加功能重新附加到先前启动甚至捕获的应用程序。 该过程不必重新启动。
活动选项
Nsight Graphics 允许使用大量选项来调整活动。 选项在“连接”窗口的“附加选项”部分中可用。 这些选项是按项目和按活动保存的,因为一个活动的选项可能与另一个活动无关。 请注意,如果每个活动的需求相同,您可能需要将它们应用于多个活动。
选项 |
描述 |
---|---|
捕获模式 |
选择如何触发捕获的捕获模式
|
启用目标 HUD |
在目标应用程序上启用 HUD,这将启用
|
强制重绘 |
启用窗口失效的定期触发,这会导致延迟呈现的应用程序(例如许多专业可视化应用程序)重新绘制。 这对于提供 Nsight Graphics 可以执行分析的一致帧流非常有用。 |
选项 |
描述 |
---|---|
帧分隔符 |
选择用于分隔 OpenGL 应用程序帧边界的 API 调用。 此设置对于不一定呈现到屏幕的应用程序(例如离屏渲染应用程序或基准测试应用程序)非常有用。 |
选项 |
描述 |
---|---|
同步着色器集合 |
控制为 D3D11 着色器收集的信息范围。 同步集合对于某些着色器相关统计信息是必需的,但可能会增加应用程序加载时间。 同步集合还要求应用程序已使用管理权限启动 |
D3D12 重放围栏行为 |
选择在 D3D12 重放期间遇到同步点时的行为。
|
DXGI SyncInterval |
控制传递给 DXGI Present 方法的 SyncInterval 值。 默认设置为禁用 V-Sync,以允许调试器收集有效的实时计数器。 |
启用修订版零数据收集 |
控制在捕获期间收集修订版零(例如,预捕获)数据。 这可能是一项昂贵的操作,无论是在内存还是处理时间方面,并且某些应用程序可以重放单帧而无需显式存储这些修订版。
|
重放捕获的 ExecuteIndirect 缓冲区 |
启用后,重放应用程序捕获的 ExecuteIndirect 缓冲区,而不是重放生成的缓冲区。 如果您的应用程序在重放中存在渲染问题,这些问题源于非确定性的 ExecuteIndirect 缓冲区(例如,基于原子操作生成的、可能因帧而异的缓冲区),请考虑此选项。 |
报告强制失败的查询接口 |
控制是否通过阻止消息框向用户报告失败的查询接口。 Nsight Graphics 是一个 API 调试器,可能有一些 API 它尚不支持或尚不了解。 当查询此类接口时,拦截将强制操作失败,并返回 E_NOINTERFACE 返回代码。 如果此操作干扰正常操作,并且否则不会导致任何问题,则可以为项目禁用它。 |
报告未知对象 |
控制是否通过阻止消息框向用户报告未知对象。 某些应用程序传递 Nsight Graphics 未知的对象。 这些对象可能表明应用程序存在错误、产品拦截中缺少支持,或者它们最终可能是无害的。 在许多情况下,此类未知对象可能会导致分析崩溃。 为了缓解此问题,Nsight Graphics 会通过阻止消息框警告用户注意此问题。 如果此操作干扰正常操作,并且否则不会导致任何问题,则可以为项目禁用它。 |
支持缓存的管道状态 |
控制是否支持缓存的管道状态。 默认情况下,Nsight Graphics 将拒绝创建或加载缓存的管道状态对象的调用。 将此选项设置为 true 将启用对这些对象的支持。 |
强制最小着色器绑定表 |
控制是否强制最小着色器绑定表。 默认情况下,Nsight Graphics 将创建与源应用程序中指定的大小匹配的重放着色器绑定表。 如果启用此选项,它将使用 SBT 中最后一个有效的非空记录来覆盖重放缓冲区大小。 这并非普遍安全,因为索引空记录是有效用法。 |
选项 |
描述 |
---|---|
强制验证 |
强制启用 Vulkan 验证层。 这需要安装 LunarG Vulkan SDK。 |
验证层 |
强制启用验证时使用的层。 此选项仅在“强制验证”打开时可见。 |
设备地址 C++ 支持 |
启用缓冲区设备地址捕获/重放支持,以便具有 VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT 的缓冲区在捕获和 C++ 重放之间具有相同的地址。 启用此选项可能会由于驱动程序使用的分配方法不同而导致不稳定性。 仅当生成间接访问着色器中缓冲区地址的应用程序的 C++ 捕获时,才需要此选项。 |
强制捕获/重放设备内存 |
强制在所有设备内存分配上设置 VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT 和 VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT 位。 如果应用程序稍后绑定可寻址缓冲区,但错误地在关联的内存上排除了该标志,则这是必需的。 |
为 C++ 捕获捕获所有设备内存 |
包括 C++ 捕获的设备内存的全部内容,而不仅仅是绑定的内容。 这会导致更大的捕获,但可能会解决越界内存访问的问题。 |
启用相干缓冲区集合 |
控制在捕获期间监视和收集映射的相干缓冲区更新。 这可能是一项昂贵的操作,并且许多应用程序可以重放单帧而无需主动监视这些更改。 如果您的捕获花费很长时间,但您没有跨帧进行相干更新,请使用此选项。 |
启用修订版零数据收集 |
控制在捕获期间收集修订版零(例如,预捕获)数据。 这可能是一项昂贵的操作,无论是在内存还是处理时间方面,并且某些应用程序可以重放单帧而无需显式存储这些修订版。
|
允许不安全的 pNext 值 |
允许检查具有潜在危险的 pNext 值的 Vulkan 结构。 默认情况下,将跳过没有已知扩展的结构。 |
使用安全对象查找 |
控制工具如何在内部存储对象。 安全查找速度较慢,但在使用不受支持的扩展时可能会提高稳定性。
|
C++ 捕获对象集 |
此选项控制哪些对象作为 Vulkan C++ 捕获的一部分导出。 默认情况下,我们将对象集限制为仅在捕获中使用的对象,但在某些情况下,用户可能希望查看应用程序中使用的所有对象。 这通常是不必要的,并且可能导致非常大的 C++ 项目。 这也可能有助于 WAR 一个错误,即工具错误地删除了它不应该删除的对象。
|
保留堆空间 |
要为帧调试器自动保留的物理设备堆空间量 (MB)。 |
取消交织线程 |
对于多线程应用程序,尝试通过将线程事件分组在一起来消除过多的上下文切换。 可能会提高重线程应用程序的 C++ 捕获重放性能。 |
忽略 DirectX/OpenGL 包装库 |
要捕获使用 Vulkan 之上的包装库(例如 DXVK)的应用程序,请将此设置设置为“是”以忽略包装库并捕获底层 Vulkan 调用。 当设置为“自动”时,Nsight 将尝试自动检测是否应忽略包装库。 |
选项 |
描述 |
---|---|
加速结构几何体跟踪 |
此选项控制如何跟踪加速结构的几何体数据。 在任何给定方法的性能、准确性和稳健性之间都存在权衡。 “自动”的默认设置最常以“深度几何体复制”来实现,后者尝试匹配最常见的应用程序行为,即需要深度复制。 例如,在构建加速结构后,应用程序可以合法地更新或销毁用于构建的几何体缓冲区。 在这种情况下,如果没有原始数据的深度副本,该工具无法保证射线追踪检查器或 C++ 捕获的完整功能。 如果您知道您的应用程序在构建后不会更新或销毁缓冲区,请考虑“浅几何体引用”选项。
|
跟踪加速结构重装 |
控制除构建外,是否还应跟踪加速结构重装。 这将需要额外的内存消耗,但可能会导致 C++ 捕获具有更代表原始应用程序的性能。 |
报告浅报告警告 |
控制是否针对可能的浅引用有效性问题发出警告。 如果专家用户知道原始加速结构输入数据保持不变,他们可以使用此设置来静音警告。 |
几何体集合池 |
指定要在哪个内存池中收集几何体数据。 Vidmem 通常性能更高,但可能比 sysmem 更受限制。 |
强制射线追踪维度为零 |
指定对于射线追踪调用,宽度/高度/深度维度应强制为零。 这将允许查看加速结构和 SBT,而无需实际执行命令。 这在重放命令导致崩溃或设备丢失问题的情况下很有用。 |
射线追踪验证 |
启用射线追踪验证层。 默认情况下,验证层处于关闭状态。 您可以将此选项设置为收集 1) 错误或 2) 警告和错误。 任何收集信息都将记录到“输出消息”窗口。 |
选项 |
描述 |
---|---|
启用驱动程序检测 |
控制需要驱动程序支持的功能的启用。 这实际上禁用
如果您遇到捕获错误,禁用此选项是第一个也是最好的尝试选项,因为它快速消除了问题,因为它关闭了许多子系统。 |
收集着色器反射 |
控制从着色器对象反射的所有信息的集合。 这包括源代码、反汇编、输入属性、资源关联等... 注意:禁用此选项后,动态着色器编辑不可用。 如果您怀疑着色器反射工具(例如 D3DCompiler.dll 或 SPIRV-Cross)存在错误或不兼容性,则此选项很有用。 |
收集 SASS |
启用获取 SASS 着色器,该着色器可用于收集着色器性能统计信息。 |
收集行表 |
启用创建着色器到 PC 的行表,着色器分析器使用该表进行源代码关联。 |
收集硬件性能指标 |
启用从硬件收集性能指标。 |
忽略不兼容性 |
Nsight Graphics 使用不兼容性系统来检测和报告可能干扰应用程序分析的问题。 默认情况下,会报告这些不兼容性,并为用户提供选择是否忽略它们进行捕获的选项(并附带可能出现问题的警告)。 但是,某些应用程序可能具有无害的不兼容性,并且每次都必须查看此警告可能是不需要的。 启用此选项后,帧将尝试忽略任何不兼容性进行捕获。 仅当您确定不兼容性不会影响您的分析时,才使用此选项。 |
阻止第一个不兼容性 |
Nsight Graphics 使用不兼容性系统来检测和报告可能干扰应用程序分析的问题。 在某些情况下,这些不兼容性可能是即将发生的故障的第一个迹象。 因此,能够阻止此类报告的故障可能有助于在使用 Nsight Graphics 运行时对崩溃进行分类和理解。 此选项默认为“自动”,以便仅报告严重的不兼容性,从而允许较小的不兼容性,以免干扰预期的操作。 如果您在使用 Nsight Graphics 时遇到应用程序崩溃,则切换到“启用”可能有助于强制提供调查崩溃的机会。 |
启用崩溃报告 |
启用崩溃数据的收集和报告,以帮助识别帧调试器的问题。 虽然在发送崩溃报告之前始终会提示用户,但此选项可用于完全禁止这些功能。 |
启用 C/C++ 序列化 |
启用将捕获序列化为 C/C++ 的功能。 默认情况下,应用程序可以创建 C++ 捕获,但在某些情况下,在调用此功能之前,会收集额外的数据来支持此功能。 此选项允许完全禁用该集合。 |
强制单线程捕获 |
控制捕获是使用并发线程还是串行线程进行。 如果您怀疑应用程序的多线程可能会干扰捕获过程,请使用此选项。 |
重放线程暂停策略 |
控制在实时分析中用于暂停线程的策略。
|
禁用所有拦截 |
关闭 Nsight Graphics 用于分析应用程序的拦截机制。 这用于消除启动失败与拦截引起的失败之间的歧义。 它对于验证应用程序设置是否正确非常有用。 启用后,关联的活动预计无法以任何方式工作。 确认您的应用程序已成功启动后,请禁用此选项。 |
帧调试 UI
帧调试器活动是基于捕获的活动。 这些活动中有两类视图 - 预捕获视图和后捕获视图。 预捕获视图通常报告应用程序运行时有关应用程序的实时信息。 后捕获视图显示与捕获帧相关的信息,并且仅在捕获应用程序以进行实时分析后才可用。 有关如何捕获的示例,请按照如何启动并连接到您的应用程序中的示例演练进行操作。
所有资源视图
所有资源视图允许您查看场景中所有可用的资源。
要访问此视图,请转到帧调试器 > 所有资源。
此视图显示应用程序使用的所有资源的网格。 对于图形资源,这些资源将以图形方式显示。 对于其他资源,使用图标来表示其类型。 选择资源后,将显示该资源的一行修订版。 单击任何修订版会将帧调试器事件更改为生成或可能消耗该修订版的最接近的事件。
单击资源下方的链接或双击资源缩略图将打开该资源上的资源查看器或射线追踪检查器。
此视图中还有许多其他功能。 在“所有资源”视图的顶部,您会找到一个工具栏
克隆 — 创建当前视图的副本,以便您可以打开另一个实例。
锁定 — 冻结当前视图,以便更改当前事件不会更新此视图。 这在尝试比较两个不同操作的状态或资源时很有用。
保存 — 将捕获的资源保存到磁盘。
红色、绿色和蓝色 — 切换打开和关闭特定颜色。
Alpha — 启用 Alpha 可视化。 在相邻的下拉列表中,您可以选择以下两个选项之一
混合 — 将 Alpha 与棋盘格背景混合。
灰度 — Alpha 值显示为灰度。
翻转图像 — 反转显示的资源图像。
工具栏下方是一组按钮,用于基于类型对资源进行高级筛选。 接下来,有一个下拉菜单,允许您选择要如何查看资源:缩略图、小缩略图、平铺或详细信息。

如果您选择详细信息视图,则可以按可用的列标题(类型、名称、大小等)对资源进行排序。
筛选
有三种方法可以筛选可用资源。
对于高级筛选,有颜色编码的按钮可以根据资源类型进行筛选。 默认情况下,所有资源类型都可见,您可以取消选择您不想看到的类型的按钮来筛选资源列表。 例如,如果您只想查看纹理,您可以单击其他按钮取消选择它们并将它们从资源列表中删除。

您可以手动键入搜索字符串来筛选资源列表。
您可以从预定义筛选器的下拉列表中进行选择,以仅查看大型资源、深度资源、未使用的资源或帧中更改的资源。 选择其中一个将填充请求的筛选器所需的 JavaScript 字符串,这对于构建自定义筛选器也很有用。

应用程序 HUD
应用程序 HUD 是一个平视显示器,它直接覆盖在您的应用程序上。 您可以使用 HUD 捕获帧,然后在 HUD 或附加主机上滚动浏览其组成的绘制调用。
在 HUD 或主机上发生的所有操作(例如捕获帧或滚动到特定的绘制调用)都会在 HUD 和主机之间自动同步,因此您可以根据需要无缝地在使用 HUD 和主机 UI 之间切换。
HUD 有两种 (2) 模式
运行:正常与您的游戏或应用程序交互,同时 HUD 显示 FPS 计数器。 当您首次使用 Nsight Graphics 启动应用程序时,HUD 处于“运行”模式。 此模式最适用于在您运行应用程序时实时查看粗略的 GPU 帧时间。
帧调试器:捕获帧后,您可以直接在 Nsight Graphics HUD 中(以及从主机)调试帧。 HUD 允许您滚动浏览帧的组成绘制调用,以平移和缩放方式查看渲染目标,并检查这些渲染目标中的特定值。
运行模式
在此模式下,您的应用程序可以正常地与游戏或应用程序交互,并且 HUD 会在场景上叠加显示帧时间。当您首次使用 Nsight Graphics 启动应用程序时,HUD 处于运行模式。

帧调试器模式
有两种不同的方法可以暂停应用程序,使其进入帧调试器模式。
按下目标应用程序捕获热键,如上所述;或
转到 Nsight Graphics UI 中的主工具栏,然后选择“暂停并捕获帧”。
捕获帧后,您可以直接在 HUD 中调试该帧。虽然您也可以在主机上调试帧,但 HUD 允许您浏览帧的组成绘制调用,查看具有平移和缩放功能的渲染目标,以及检查这些渲染目标中的特定值。

可以单击 HUD 滚动条以在事件之间导航。此外,该视图还具有多个控件来帮助您进行资源调查。
热键 |
操作 |
---|---|
在滚动条上单击鼠标左键并拖动 |
导航到帧中的特定绘制调用。当所需的绘制调用处于活动状态时,释放鼠标左键。当前活动绘制调用的几何体将被高亮显示,只要它在屏幕上。 |
Home 键 |
导航到第一个事件 |
End 键 |
导航到最后一个事件 |
CTRL + 左方向键 |
导航到下一个事件 |
CTRL + 右方向键 |
导航到上一个事件 |
CTRL + 加号 (+) |
放大 |
CTRL + 减号 (-) |
缩小 |
CTRL + 零 (0) |
使当前纹理适合屏幕。 |
在渲染目标上单击鼠标左键并拖动 |
平移和缩放当前显示的渲染目标。使用鼠标滚轮放大渲染目标的特定部分。 |
N 键 |
在当前可用的渲染目标、深度目标和模板目标之间循环切换。 |
W 键 |
在线框模式(关闭、红色、动画)之间循环切换。 |
要将显示切换到另一个活动的渲染目标
单击 HUD 工具栏上的“选择 渲染目标”按钮。
将出现一个下拉菜单,显示当前绘制调用的所有有效选项。选择所需的渲染目标。
请注意,如果选定的渲染目标对于不同的绘制调用不再处于活动状态,则显示将自动切换到活动的渲染目标。
您还可以使用 Ctrl+N 热键在可用的渲染目标之间切换。
HUD 图标 |
定义 |
---|---|
![]() |
导航到下一个事件。 |
![]() |
导航到上一个事件。 |
![]() |
在当前可用的渲染目标、深度目标和模板目标之间循环切换。 |
![]() |
在线框模式(关闭、红色、动画)之间循环切换。 |
API 检查器
API 检查器是所有受支持 API 通用的视图,它提供了对特定事件(捕获分析被滚动到该事件)所有相关状态的详尽查看。
要访问此视图,请转到“帧调试器”>“API 检查器”。
虽然该视图是通用的,但其中的状态对于每个 API 都是特定的。请参阅下面与您感兴趣的 API 相关的部分。
搜索
在 API 检查器页面中,有一个搜索栏,可以快速查找特定页面上所需的信息。该栏将指示每个页面中的匹配项数量,并提供向前和向后导航按钮,用于在每个匹配项之间导航。这些按钮还支持快捷键绑定,F3 用于下一个,Shift+F3 用于上一个。

展开/折叠
在 API 检查器页面中,有许多部分可以展开或折叠,以帮助缩小显示的信息范围,使其仅包含您当时希望看到的信息。虽然每个部分都可以单独折叠,但 UI 具有允许一键展开或折叠所有元素的按钮。

导出
每个页面都能够以 json 格式导出为结构化数据。此 json 数据将包括数据元素的键值对,以及指示不同类型数据之间关系的间接引用。
在您可能希望导出数据以进行持久化,或者可能运行不同事件的数据之间的差异比较的情况下,此数据非常有用。

该视图还能够导出所有页面的数据。每个页面中的信息将导出到一个大型的组合文件中,格式为结构化的 json 格式。要完成此操作,请使用“将所有页面导出到 Json”按钮。

D3D11 API 检查器
API 检查器视图具有特定于 API 的管线导航器,允许您选择 GPU 管线内的特定状态组。从这里,您可以检查每个阶段的 API 状态,包括绑定了哪些纹理和渲染目标,或者相关常量中使用了哪些着色器。请注意,如果某个阶段未激活(要么该阶段未绑定任何内容,要么它不适用于当前操作),则它将灰显,但您仍然可以单击它来检查状态。
管线阶段
下表显示了可供检查的阶段
IA — 输入汇编器显示顶点缓冲区和索引缓冲区的布局。
VS — 显示绑定到 顶点着色器 阶段的所有着色器资源视图和常量缓冲区,以及 HLSL 源代码和其他着色器信息的链接。
HS — 这显示绑定到 外壳着色器 阶段的所有着色器资源视图和常量缓冲区,以及 HLSL 源代码和其他着色器信息的链接。
DS — 这显示绑定到 域着色器 阶段的所有着色器资源视图和常量缓冲区,以及 HLSL 源代码和其他着色器信息的链接。
GS — 显示绑定到 几何着色器 阶段的所有着色器资源视图和常量缓冲区,以及 HLSL 源代码和其他着色器信息的链接。
SO — 显示为 流输出 绑定的资源。
RS — 显示 光栅化器状态 参数,包括剔除模式、剪刀和视口矩形等。
PS — 显示绑定到 像素着色器 阶段的所有着色器资源视图、常量缓冲区和渲染目标视图,以及 HLSL 源代码和其他着色器信息的链接。
OM — 显示 输出合并器 参数,包括混合设置、深度、模板、渲染目标视图等。
CS — 这显示绑定到 计算着色器 阶段的所有着色器资源和无序访问视图和常量缓冲区,以及 HLSL 源代码和其他着色器信息的链接。
输入汇编器 (IA)
输入汇编器页面显示顶点缓冲区和索引缓冲区的详细信息,以及顶点的输入布局。

着色器(VS、HS、DS、GS、PS、CS)
各种着色器页面显示所有常量缓冲区、着色器资源视图和输入/输出参数,以及 HLSL 源代码和其他着色器信息的链接。
在常量缓冲区列表中,您可以展开缓冲区以查看哪些 HLSL 变量映射到每个条目,以及当前值。

要启用 HLSL 变量的解析,您必须在编译着色器时启用调试信息。有关为优化 Nsight Graphics 中的使用而准备着色器所需的参数的讨论,请参阅着色器编译。
光栅化器状态 (RS)
光栅化器状态页面显示参数,包括剔除模式、剪刀和视口矩形等。

输出合并器 (OM)
输出合并器页面显示参数,包括混合设置、深度、模板、当前绑定的渲染目标视图等。

D3D12 API 检查器
API 检查器视图具有特定于 API 的管线导航器,允许您选择 GPU 管线内的特定状态组。从这里,您可以检查每个阶段的 API 状态,包括绑定了哪些纹理和渲染目标,或者相关常量中使用了哪些着色器。请注意,如果某个阶段未激活(要么该阶段未绑定任何内容,要么它不适用于当前操作),则它将灰显,但您仍然可以单击它来检查状态。
管线阶段
下表显示了可供检查的阶段
IA — 输入汇编器显示顶点缓冲区和索引缓冲区的布局。
VS — 显示绑定到 顶点着色器 阶段的所有着色器资源视图和常量缓冲区,以及 HLSL 源代码和其他着色器信息的链接。
HS — 这显示绑定到 外壳着色器 阶段的所有着色器资源视图和常量缓冲区,以及 HLSL 源代码和其他着色器信息的链接。
DS — 这显示绑定到 域着色器 阶段的所有着色器资源视图和常量缓冲区,以及 HLSL 源代码和其他着色器信息的链接。
GS — 显示绑定到 几何着色器 阶段的所有着色器资源视图和常量缓冲区,以及 HLSL 源代码和其他着色器信息的链接。
SO — 显示为 流输出 绑定的资源。
RS — 显示 光栅化器状态 参数,包括剔除模式、剪刀和视口矩形等。
PS — 显示绑定到 像素着色器 阶段的所有着色器资源视图、常量缓冲区和渲染目标视图,以及 HLSL 源代码和其他着色器信息的链接。
OM — 显示 输出合并器 参数,包括混合设置、深度、模板、渲染目标视图等。
CS — 这显示绑定到 计算着色器 阶段的所有着色器资源和无序访问视图和常量缓冲区,以及 HLSL 源代码和其他着色器信息的链接。
输入汇编器 (IA)
输入汇编器页面显示顶点缓冲区和索引缓冲区的布局,以及顶点声明信息。

着色器(VS、HS、DS、GS、PS、CS)
各种着色器页面显示所有常量缓冲区、着色器资源视图和输入/输出参数,以及 HLSL 源代码和其他着色器信息的链接。
在常量缓冲区列表中,您可以展开缓冲区以查看哪些 HLSL 变量映射到每个条目,以及当前值。

要启用 HLSL 变量的解析,您必须在编译着色器时启用调试信息。有关为优化 Nsight Graphics 中的使用而准备着色器所需的参数的讨论,请参阅着色器编译。
光栅化器状态 (RS)
光栅化器页面显示渲染状态设置、纹理环绕模式和视口信息。


输出合并器 (OM)
输出合并器页面显示参数,例如混合设置、深度和模板状态。

设备
设备页面显示有关所用架构的详细信息。

Present
Present 页面显示有关已用后备缓冲区的信息。

OpenGL API 检查器
当使用 Nsight Graphics 的帧调试器功能时,您可能希望深入研究特定的绘制调用,以便进一步分析您的应用程序。API 检查器导航有三种不同的类别。

管线阶段
第一类布局类似于“虚拟 GPU 管线”。API 检查器的此管线部分包括以下内容
Vtx Spec(顶点规范)— 与您的顶点属性、顶点数组对象状态、元素数组缓冲区和绘制间接缓冲区关联的状态信息。
VS(顶点着色器)— 顶点着色器状态,包括属性、采样器、uniform 等。
TCS(细分控制着色器)— 细分控制着色器状态,包括属性、采样器、uniform、控制状态等。
TES(细分评估着色器)— 细分评估着色器状态,包括属性、采样器、uniform、评估状态等。
GS(几何着色器)— 几何着色器状态,包括属性、采样器、uniform、几何状态等。
XFB(变换反馈)— 变换反馈状态,包括对象状态和绑定的缓冲区。
Raster(光栅化器)— 光栅化器状态,包括点、线和多边形状态、剔除状态、多重采样状态等。
FS(片段着色器)— 片段着色器状态,包括属性、采样器、uniform 等。
Pix Ops(像素操作)— 像素操作的状态信息,包括混合设置、深度和模板状态等。
FB(帧缓冲区)— 当前绘制的帧缓冲区的状态,包括默认帧缓冲区、读取缓冲区、绘制缓冲区等。
对象和像素状态检查器
API 检查器的对象和像素状态检查器部分包括以下内容
纹理 — 有关所有当前绑定的纹理和采样器的详细信息,包括纹理和采样器参数。
图像 — 有关当前绑定到图像单元的所有图像的详细信息。
缓冲区 — 有关所有绑定的缓冲区对象的详细信息,包括大小、用途等。
程序 — 有关当前绑定的程序对象和/或管线程序管线对象的信息,包括着色器、活动 uniform 等。
像素 — 像素打包和解包状态的当前设置。
杂项
杂项屏幕包含其他信息,例如着色器限制、与实现相关的依赖值、变换反馈限制以及各种最小值/最大值。
Vulkan API 检查器
API 检查器视图具有特定于 API 的管线导航器,允许您选择 GPU 管线内的特定状态组。从这里,您可以检查每个阶段的 API 状态,包括绑定了哪些纹理和渲染目标,或者相关常量中使用了哪些着色器。请注意,如果某个阶段未激活(要么该阶段未绑定任何内容,要么它不适用于当前操作),则它将灰显,但您仍然可以单击它来检查状态。
管线阶段
下表显示了可供检查的阶段
管线 — 显示有关当前绑定的管线对象的信息。
渲染通道 — 显示有关当前渲染通道对象的信息。
FBO — 显示与当前渲染通道关联的 帧缓冲区对象 相关的信息。
IA — 输入汇编器显示顶点缓冲区和索引缓冲区的布局。
视口 — 显示当前的视口和剪刀信息。
VS — 显示绑定到 顶点着色器 阶段的所有着色器资源视图和常量缓冲区。
TCS — 显示与 细分控制着色器 阶段关联的所有着色器资源。
TES — 显示与 细分评估着色器 阶段关联的所有着色器资源。
GS — 显示绑定到 几何着色器 阶段的所有着色器资源视图和常量缓冲区。
SO — 显示为 流输出 绑定的资源。
Raster — 显示 光栅化器状态 参数,包括剔除模式、剪刀和视口矩形等。
FS — 显示与 片段着色器 阶段关联的所有着色器资源。
Pix Ops — 显示 像素操作 参数,包括深度/模板、多重采样和混合状态。
Compute — 这显示绑定到 计算着色器 阶段的所有着色器资源和无序访问视图和常量缓冲区。
Misc - 显示与实例、物理设备和逻辑设备相关的 杂项 信息。
管线
管线 页面显示有关当前绑定的管线对象的信息,包括:创建信息、管线布局和推送常量范围。

渲染通道
渲染通道 页面显示有关当前渲染通道的信息,包括:清除值、附件操作和子通道依赖关系。

输入汇编器 (IA)
输入汇编器页面显示顶点缓冲区和索引缓冲区的布局,以及顶点绑定和属性信息。

着色器(VS、TCS、TES、GS、FS、CS)
各种着色器页面显示所有着色器模块,包括:创建信息、人类可读的 SPIR-V 源代码、当前推送常量、当前绑定的描述符集、关联的缓冲区、关联的图像和采样器以及此阶段的关联纹素缓冲区视图。

光栅化器
光栅化器页面显示与管线对象关联的所有光栅化信息,包括:多边形模式、剔除模式、深度偏移和线宽。

像素操作 (Pix Ops)
像素操作页面显示与当前像素状态关联的信息,包括:深度/模板状态、多重采样状态和混合状态。

杂项信息 (Misc)
杂项信息页面显示与实例、物理设备、逻辑设备和队列相关的信息

API 统计视图
API 统计视图是重要 API 调用的高级视图,包括帮助您了解 GPU 和 CPU 时间花费在哪里的信息。
要访问此视图,请转到“帧调试器”>“API 统计”。

批次直方图视图
批次直方图视图为用户提供了一种直观的方式来检查图元在绘制调用中的分布情况。绘制调用可以配置地划分为桶,并允许禁用或启用。这对于想要了解哪个绘制调用负载较重以及它如何影响渲染目标的用户非常有用。
要访问此视图,请转到“帧调试器”>“批次直方图”。
批次直方图将显示一个直方图图表,其中包含划分的桶,并且可以通过一些选项进行配置。
单击“配置”以打开配置窗格
分桶模式 — 确定如何将绘制调用划分为桶。
对数:按对数刻度分桶。
线性:按线性刻度分桶。
分桶最小值/最大值 — 指定适用于分桶的范围,超出范围的事件将放入书挡桶中。
桶计数 — 指定桶计数。
单击“桶”,然后在表格视图中显示相应的事件。您可以通过单击“全部禁用”或“全部启用”来禁用或启用事件,也可以通过复选框或右键单击表格项来实现。此外,表格上的链接器指向事件列表中的相应事件。

当前目标视图
当前目标视图用于显示当前绑定的输出目标。这可能很有用,因为它专注于绑定的输出资源,而不是必须在“所有资源”视图中搜索它们。
要访问此视图,请转到“帧调试器”>“当前目标”。
“当前目标”将在左侧窗格中显示所有当前绑定的颜色、深度和模板目标的缩略图。当您从一个事件滚动到另一个事件时,此视图将发生变化。可以选择左侧的所有缩略图以在右侧显示更大的图像。您还可以单击每个缩略图下方的链接,以在资源查看器中打开目标。

事件查看器
事件视图显示捕获帧中的所有 API 调用。它还显示 CPU 和 GPU 活动,作为衡量每个调用“成本”的指标。
要访问此视图,请转到“帧调试器”>“事件”。

为了为每个 API 调用添加上下文,提供了发出该调用的线程 ID 和对象/上下文。Nsight 还支持在这些列中使用应用程序生成的对象和线程名称;有关设置这些名称的受支持方法的指南,请参阅命名对象和线程。
单击“事件”列中的超链接将带您进入该绘制调用的 API 检查器页面。
您可以选择以分层或平面视图查看事件。如果使用多种性能标记类型,您可以选择正确的类型,以及调用显示的不同详细程度(变量 + 值、值或无)。您还可以通过单击任何可用的列标题对事件进行排序。
可以通过右键单击表格的标题来切换列的可见性。默认情况下,如果某些列对于捕获的帧不提供唯一数据(例如,单线程),则这些列将被隐藏。
列 |
描述 |
---|---|
(指示器列) |
指向当前滚动的事件 |
(书签列) |
当使用书签时,此列将直观地指示该行是否已添加书签。当不使用书签时,此列将被隐藏。 |
事件 |
此事件的 API 调用、操作或注释的事件 ID。在左侧,当使用性能标记时,将直观地指示性能标记堆栈,并且 ID 指示此层次结构级别中包含的事件范围。将鼠标悬停在此单元格上将显示完整的性能标记层次结构。当所讨论的事件是一个操作时,右侧将包含一个链接,用于在 API 检查器中打开该事件。 |
描述 |
描述 API 调用、操作或注释。此列分层列出事件层次结构,该层次结构由 Marker API 的使用控制。 |
对象 |
事件在其上或由其操作的 API 对象(上下文、队列、资源等)。 |
CPU 毫秒 |
所讨论事件的 CPU 计时。当这是一个性能标记范围时,这表示一个聚合总和。这些计时仅供参考,因为由于捕获操作对其计时的影响,它们并非完全准确。请注意,像 Nsight Systems™ 这样的跟踪工具的目标是更高分辨率的计时。 |
GPU 毫秒 |
所讨论事件的 GPU 计时。并非所有事件都具有 GPU 计时。对于性能标记范围,会指示一个增量时间,并注意这是其中事件计时的近似聚合,而不是绝对计时。 |
线程 |
执行 API 调用、操作或注释的线程。 |
标签 |
与所讨论的调用相关的元数据标签列表。这些标签通常指示调用中未在其 API 名称或参数中显现的特殊特征。当没有列具有标签时,此列将被隐藏。 |
问题 |
对于支持问题跟踪的 API(OpenGL),此列指示特定的 API 调用或操作是否具有感兴趣的问题/警告。 |
过滤事件
事件视图可以使用快速过滤表达式以及详细的配置对话框进行过滤。
过滤器输入框提供了一个快速的、基于正则表达式的事件匹配,以查找感兴趣的事件。输入后,视图将自动更新以匹配指定的过滤器。
“配置”按钮弹出一个对话框,用于对视图中的事件进行更高级以及持久的过滤。
此对话框中的更改将立即生效。主要有三种类型的过滤器
事件类型过滤器 - 这些过滤器允许根据事件的分类进行过滤。例如,您可能希望隐藏所有非操作事件,以快速过滤到仅绘制调用、清除和其他操作。
其他过滤器 - 这些过滤器允许匹配具有特定特征的事件。此外,“高级过滤器”选项卡允许基于 javascript 对特定列进行过滤。
方法过滤器 - 这些过滤器隐藏与方法名称或对象类型匹配的方法。要添加方法过滤器,请右键单击要隐藏的事件,然后在视图中选择隐藏功能之一。
过滤器持久性
通过过滤器配置对话框设置的过滤器将在会话之间保持持久性。此外,如果需要多个过滤器配置,您可以保存不同的命名版本,并通过名称快速调用它们。
输入到主过滤器输入框中的过滤器不会持久保存,因为这些过滤器旨在快速过滤事件数据。
正则表达式语法
对于支持正则表达式语法的条目,该语法使用 perl 兼容的正则表达式语言实现。以下是一些常见任务及其实现的表达式示例
任务 |
表达式 |
---|---|
搜索绘制调用 |
(或使用预定义的过滤器) |
匹配 OpenGL 绑定调用 |
|
匹配 D3D AddRef 或 Release 调用 |
|
搜索设置常量缓冲区的 D3D 方法 |
|
JavaScript 语法
高级过滤器配置对话框支持 JavaScript 语法。这使得能够对过滤表达式进行复杂的评估。JavaScript 表达式的基本方法是将特定数据列与表达式进行匹配。列通过 $('ColumnName')
表达式“访问”。例如,标题为“Description”的列通过 $('Description')
访问。从那里,您可以执行数学、逻辑和文本匹配表达式。请参阅下面的一些示例,以演示这些表达式的功能和用法
任务 |
表达式 |
---|---|
在描述列中匹配 draw |
|
查找 GPU 时间不为零的事件 |
|
查找奇数事件 |
|
查找 GPU 时间不为零的非绘制事件 |
|
添加书签
在过滤时,通常希望在查找其他项目时保留某些项目的上下文。要防止事件被过滤,请右键单击事件,然后选择“切换书签”。
或者,您可以双击或使用 Ctrl + B 为当前选定的事件添加书签。要在书签之间导航,请使用 Alt + 向上和 Alt + 向下。
如果您希望在滚动条上查看过滤后的结果,您可以选择过滤器工具栏右侧的标签按钮,滚动条中将出现一个新行,显示您过滤后的事件,允许您隔离地导航这些事件。


性能标记
在“事件”页面上,您可以使用分层视图来查看性能标记的树视图。下拉列表中列出的项目与滚动条上的嵌套子性能标记相对应。
如果您在“事件”页面上使用平面视图,则性能标记不会嵌套,但您可以将鼠标悬停在最左侧列中的颜色编码字段上,这允许您查看有关该性能标记的详细信息。
当应用程序使用多种性能标记时,“标记 API”允许选择用于显示的 API。如果应用程序使用中间件,或者混合使用具有不同标记策略的组件,则可能会出现这种情况。

快捷键
导航 |
|
---|---|
|
转到列表中的第一个事件。 |
|
转到列表中的最后一个事件。 |
|
转到上一个操作。 |
|
转到下一个操作。 |
|
折叠当前性能标记级别。 |
|
展开当前性能标记级别。 |
|
转到下一个书签。 |
|
转到上一个书签。 |
|
转到性能标记堆栈同一级别上的下一个性能标记。 |
|
转到性能标记堆栈同一级别上的上一个性能标记。 |
|
转到当前选择的堆栈上方一级(或更高级别)的下一个性能标记。 |
|
转到当前选择的堆栈上方一级的上一个性能标记。 |
|
向下移动性能标记堆栈到当前选择下方一级的下一个性能标记。 |
|
向下移动性能标记堆栈到当前选择下方一级的前一个性能标记。 |
|
将当前事件聚焦到视图的中心。 |
|
将当前事件聚焦到视图的顶部。 |
|
将当前事件聚焦到视图的底部。 |
|
通过折叠所有其他性能标记来聚焦当前选择。如果当前选择本身是性能标记,则将其展开。 |
|
清除选择。 |
|
选择所有事件。 |
|
复制选定的事件。 |
事件详细信息
事件详细信息视图以分层树结构显示当前事件的所有参数,该结构允许搜索。
要访问此视图,请转到“帧调试器”>“事件详细信息”。

由于此窗口显示当前事件的参数,因此它会随着您浏览场景而变化。如果您希望保留参数以与另一个调用进行比较,则该视图支持克隆和锁定功能。
列 |
描述 |
---|---|
名称 |
参数的名称或参数结构的子项。 |
值 |
为此参数传递给 API 调用的值。 |
类型 |
所讨论参数的类型。 |
对于引用 API 对象的事件,事件详细信息视图提供了一个链接,用于在对象浏览器中检查有关该对象的更多信息。

几何体视图
几何体视图采用 Direct3D、OpenGL 或 Vulkan 机器的状态,以及当前绘制调用的参数,并显示预转换的几何体。
要访问此视图,请转到“帧调试器”>“几何体”。
图形选项卡

鼠标事件
悬停 (Hover) — 提示悬停图元的元素。
左键单击 (Left Click) — 选择图元;如果点击空白处,则重置选择。在图形查看器中选择时,内存表中的相关行也会同时被选中。
属性选项 (Attribute Options)
位置 (Position) — 指定用于位置几何数据的顶点属性。
颜色 (Color) — 指定几何体的着色方式。如果选择漫反射颜色 (Diffuse Color),将使用选定的漫反射颜色色板进行着色。如果选择顶点属性,则将使用选定的属性进行逐顶点着色。
法线 (Normal) — 指定逐顶点法线。当使用指定法线属性 (Normal Attribute)的着色模式或渲染法线向量时,此选项适用。
渲染选项
单击几何体视图 (Geometry View) 右下角的配置 (Configure) 将打开渲染选项菜单。

重置相机 (Reset Camera) — 将相机重置为其默认方向。默认情况下,查看器会使用边界球体包围所有几何体,以获得最佳方向。
缩放至选定项 (Zoom To Selected) — 将相机缩放至选定的图元。
渲染模式 (Render Mode) — 确定如何渲染和光栅化几何体。
实体 (Solid):渲染填充的几何体。
点 (Points):渲染顶点点云。
线框 (Wireframe):渲染几何体的线框。
线框 + 实体 (Wireframe + Solid):渲染填充的几何体,并在其顶部叠加线框。
着色模式 (Shade Mode) — 指定渲染图像的光照模式。
选定颜色属性 (Selected Color Attribute):使用指定的颜色属性着色
使用生成的法线进行平面着色 (Flat Shading Using Generated Normals):使用计算出的法线渲染几何体,采用平面着色
使用法线属性进行平面着色 (Flat Sharing Using Normal Attribute):使用指定的法线属性 (Normal Attribute)渲染几何体,采用平面着色。
使用法线属性进行平滑着色 (Smooth Shading Using Normal Attribute):使用指定的法线属性 (Normal Attribute)渲染几何体,采用平滑着色。
渲染法线向量 (Render Normal Vectors) — 将指定的法线属性渲染为从每个顶点发出的向量。向量可以使用法线颜色 (Normal Color)选项进行着色,并可以使用法线比例 (Normal Scale)选项进行缩放。
内存选项卡 (Memory Tab)
几何体视图 (Geometry View) 的 内存选项卡 (Memory tab) 显示顶点缓冲区的内容,按照当前的顶点或输入属性规范进行解释。此视图对于查看绘制调用的原始数据非常有用。此视图的另一个功能是,它会高亮显示无效或损坏的顶点,从而简化查找问题数据的过程。另一个有用的功能是与图形查看器的选择联动,选择内存行也会选择关联的图元。
几何体数据有两种显示模式
索引缓冲区顺序 (Index Buffer Order) 显示由当前索引缓冲区和当前绘制调用索引的顶点。
顶点缓冲区顺序 (Vertex Buffer Order) 显示从顶点缓冲区的开头和绘制调用规范线性排列的顶点。
对象浏览器 (Object Browser)
对象浏览器 (Object Browser) 视图提供帧中跟踪的所有对象的列表,按名称和类型列出。每个对象下方是 Nsight 跟踪的属性和其他元数据的列表。此视图对于查找使用特定类型属性的对象非常有用,例如具有特定标志的内存缓冲区。
要访问此视图,请转到 帧调试器 (Frame Debugger) > 对象浏览器 (Object Browser)。此视图也是 事件详情 (Event Details) 和 事件查看器 (Event Viewer) 视图提供的链接的目标。

此视图支持 克隆 (Clone) 功能。但是请注意,此视图捕获每个对象在帧结束时的固定属性和元数据。对于具有可变对象属性的 API,例如 OpenGL,这些属性不会与擦洗同步更新。因此,锁定 (Lock) 功能不适用于此视图。
此视图提供两个并排的窗格。左侧的 对象 (Objects) 窗格提供对象列表及其属性;右侧窗格是上下文相关的,并提供有关左侧选定对象的更多信息。
对象窗格 (Objects Pane)
对象窗格(左侧)提供多种对象过滤功能
对象名称和属性可以通过过滤器框进行过滤。
对象类型可以通过类型组合框进行过滤(默认为 所有类型 (All Types))。
可以根据对象是否报告使用情况来过滤对象(默认为 任意使用次数 (# of Usages))。
过滤属性 (Filter Properties) 复选框确定在过滤对象树视图中的项目时是否考虑对象的属性。
对象名称 (Object Name)
本节显示选定对象的名称。
当选定对象具有用于查看该类型附加信息的特定查看器时,将提供指向该特定查看器的链接。例如,纹理资源将提供一个链接,用于在 资源查看器 (Resource Viewer) 中打开选定的纹理。
对象使用情况 (Object Usage)
本节列出了一个表格,其中包含对象使用的事件。每个事件都将被标记以指示该对象的 使用情况 (Usage)(读取 (READ) 或写入 (WRITE))。
资源查看器 (Resource Viewer)
资源查看器 (Resource Viewer) 允许您查看场景中的所有可用资源。单击任何帧调试视图中的资源链接即可调出此视图。
资源查看器通过来自许多 Nsight 视图中的资源缩略图或条目的链接打开,例如来自 API 检查器 (API Inspector) 或 所有资源视图 (All Resources View)。
打开后,有两个选项卡可用
图形 (Graphical)
内存 (Memory)
图形选项卡
图形 (Graphical) 选项卡允许您检查资源,使用鼠标左键单击并拖动进行平移,使用鼠标滚轮进行缩放,以及检查像素值。此外,您还可以在此保存资源到磁盘。如果您的 GPU 和 API 支持,您还可以在此启动像素历史记录会话,以获取给定像素的所有贡献片段。

当您从左侧窗格中选择缓冲区时,显示直方图 (Show Histogram) 按钮将在图形 (Graphical) 选项卡的右侧可用,您可以使用该按钮重新映射正在查看的资源的颜色通道。

要修改直方图视图,可以使用以下选项

您可以通过直方图下方的滑块设置最小和最大截止值,或者在 最小值 (Minimum) 和 最大值 (Maximum) 框中键入值。
您可以使用 对数 (Log) 按钮更改比例。
亮度 (Luminance) 按钮允许您可视化亮度而不是颜色值。
归一化 (Normalize) 按钮可以将最小值和最大值预设为资源中数据的范围。
内存选项卡 (Memory Tab)
内存 (Memory) 选项卡显示资源数据的转储。

您可以使用多个选项来配置此内存的显示方式
轴 (Axis) 下拉列表在地址(内存偏移量)和索引(数组元素)视图之间切换。
偏移量 (Offset) 条目将视图限制为给定资源内的偏移量。
范围 (Extent) 条目将视图限制为给定资源内的最大范围。
精度 (Precision) 微调框控制浮点条目显示的小数位数。
十六进制显示 (Hex Display) 在十进制(以 10 为基数)和十六进制(以 8 为基数)显示格式之间切换。
哈希 (Hash) 显示表示当前偏移量和范围内的给定内存资源的哈希值。这对于比较内存对象或子区域非常有用。
转置 (Transpose) 按钮交换数据表示的行和列。
配置 (Configure) 按钮打开结构化内存配置 (Structured Memory Configuration) 对话框。
其他功能 (Additional Capabilities)
此视图中还有许多其他功能。在查看器的顶部,您会找到一个工具栏

克隆 — 创建当前视图的副本,以便您可以打开另一个实例。
锁定 — 冻结当前视图,以便更改当前事件不会更新此视图。 这在尝试比较两个不同操作的状态或资源时很有用。
保存 — 将捕获的资源保存到磁盘。
红色、绿色和蓝色 — 切换打开和关闭特定颜色。
Alpha — 启用 Alpha 可视化。 在相邻的下拉列表中,您可以选择以下两个选项之一
混合 — 将 Alpha 与棋盘格背景混合。
灰度 — Alpha 值显示为灰度。
翻转图像 — 反转显示的资源图像。
像素历史记录 (Pixel History)
像素历史记录启用对导致像素值变化的绘制、清除和数据更新事件的自动检测。此外,像素历史记录可以识别未能修改特定纹理目标的片段,使您能够了解绘制可能失败的原因,例如您是否可能在设置管线时错误配置了 API 状态。
要运行像素历史记录测试,请单击 按钮并选择一个像素以运行实验。像素历史记录 (Pixel History) 视图将显示一个加载栏,并在完成后显示结果。

结构化内存配置 (Structured Memory Configuration)
结构化内存配置 (Structured Memory Configuration) 对话框允许用户指定数据布局,以解释支持所选资源的原始数据。例如,纹理可以由其颜色通道表示,或者统一缓冲区可以由该缓冲区中打包的各种类型表示。

在输入有效的结构定义后,查看器将自动更新以遵守配置。

可以使用类似 C 语言的简单语法创建新列。
int; // creates a column with an anonymous int
int x; // creates a second column with an int named x
float y; // creates a third column with a float named y
其中可以像下面这样定义其他用户类型
struct MyType{ int x; float y;};
struct MyOtherType{ MyType z; double u; };
许多常用的定尺寸、不定尺寸和归一化类型被允许作为有效类型。向量和矩阵类型以类似于 HLSL 和 GLSL 的语法提供。可以通过单击配置对话框的可展开的“已定义类型 (Defined Types)”子部分来浏览和搜索支持的类型的完整列表。

关于解析器的一些附加说明
不支持完整的 C/C++ 语法。
接受单行注释;不接受 c 风格的块注释 (
/* */
)。目前不支持宏。
不考虑对齐;所有类型都被认为是紧凑排列的。
要添加显式填充,请使用
padN
,其中 N 是 8 的倍数。成员也可以选择性地隐藏,这对于缩小数据范围很有用。
单击纹理资源时,配置将自动填充以解释该格式的通道。

类似地,缓冲区默认设置为通用字节配置。用户通常可以通过检查具体用例来解释此缓冲区数据。例如,可以在 API 检查器 (API Inspector) 视图的输入汇编器 (Input Assembler) 部分中查看顶点缓冲区的布局,或者可以通过查看着色器源代码中指定的数据布局来解释统一缓冲区。
要持久化配置,您可以单击 保存… (Save…) 按钮为该配置分配名称。

稍后,您可以通过单击 加载… (Load…) 按钮来恢复此配置。

擦洗器 (Scrubber)
Nsight Graphics 帧调试器 (Frame Debugger) 有两个部分。一部分作为主机上的帧调试器 (Frame Debugger) 窗口出现。另一部分作为目标应用程序上的平视显示器 (HUD) 出现。
要访问此视图,请转到 帧调试器 (Frame Debugger) > 擦洗器 (Scrubber)。
帧调试器 (Frame Debugger) 中作为目标机器上的 HUD 显示的部分包括以下内容
HUD 工具栏 (HUD Toolbar) — 控制帧捕获,以及许多其他选项(帮助等)。
帧擦洗器 (Frame Scrubber) — 指示当前的绘制事件。主机上的帧调试器 (Frame Debugger) 和 HUD 上都有一个擦洗器视图。帧擦洗器控件彼此保持同步,这意味着当您移动一个控件上的控件时,它会影响另一个控件。例如,如果将 HUD 上的帧擦洗器移动到高亮显示新的绘制事件,则帧调试器 (Frame Debugger) 上的擦洗器也会同步移动以执行相同的操作。

了解帧擦洗器 (Understanding the Frame Scrubber)
为了便于讨论图形调试,了解一些常用术语很有帮助。
事件 (Event) 是对 API 的单次调用。它可以是三角形绘制调用、后缓冲区清除,或者不太明显的调用,例如配置缓冲区。快照 (Snapshot) 是一系列事件。
动作 (Action) 是事件类型的子集。它可以是以下类型之一:(1)绘制调用 (Draw Call),(2)清除 (Clear),或(3)分派 (Dispatch)。动作很有趣,因为它们明确地更改可能导致视觉变化的数据。
注意
对于 Direct3D 帧调试:Direct3D 运行时文档指出,“AddRef & Release 的返回值可能不稳定,不应依赖。” Nsight Graphics 帧调试器 (Frame Debugger) 也将对对象进行额外的引用,因此任何依赖于特定时间的精确引用计数的代码都可能失败。通常,用户不应期望从 Direct3D 运行时返回精确的引用计数。有关更多信息,请参阅 Microsoft 的 管理引用计数的规则 (Rules for Managing Reference Counts)。
当您调试图形项目时,擦洗器 (Scrubber) 窗口会显示您实现的性能标记。当使用用户定义的标记时,擦洗器 (Scrubber) 窗口将使用您为性能标记定义的颜色和标签。

在擦洗器 (Scrubber) 上,您可以选择一个性能标记,它将自动创建一个时间范围内发生的所有绘制调用的范围。再次单击它将使擦洗器自动缩放到该事件范围。您可以以相同的方式放大嵌套/子标记。
要缩小,请单击父性能标记,或使用 CTRL + 鼠标滚轮。
性能标记也显示在 HUD 上,颜色编码与它们在擦洗器 (Scrubber) 上的颜色编码相同。但是,在 HUD 上,信息被压缩,您必须将鼠标悬停在选定的性能标记上才能获取其详细信息。

默认视图将显示应用程序中的事件,以及您定义的任何性能标记。单击 添加… (Add…) 按钮将打开一个对话框,您可以在其中选择要添加的范围类型。
程序范围 (Program Ranges) — 使用相同着色器程序的动作。
视口 (Viewport) — 渲染到相同视口矩形的动作。
Alpha 混合已启用 (Alpha Blending Enabled) — 启用了 Alpha 混合的动作。
Alpha 测试已启用 (Alpha Test Enabled) — 启用了 Alpha 测试的动作。
背面剔除已启用 (Back Face Cull Enabled) — 启用了背面剔除的动作。
用户 (User) — 由您动态定义的范围。使用 SHIFT + 鼠标左键单击并在创建的“用户 (User)”行上拖动擦洗器以创建新范围。
右键单击擦洗器 (Scrubber) 中的特定动作将允许您打开该动作的 API 检查器 (API Inspector),更改视图设置或启动着色器分析。
擦洗器视图选项 (Scrubber View Options)

从模式 (Mode) 下拉菜单中,选择以下选项之一
单位比例 (Unit Scale) 是默认视图,它只是在时间轴上显示动作和事件。
GPU 时间比例 (GPU Time Scale) 显示 GPU 活动以及每个事件或动作花费 GPU 的时间。
CPU 时间比例 (CPU Time Scale) 显示 CPU 活动以及每个事件或动作花费 CPU 的时间。
X 轴为 CPU,Y 轴为 GPU (X by CPU, Y by GPU) 在水平 X 轴上显示 CPU 时间比例,在垂直 Y 轴上显示 GPU 时间比例。
根据您选择的模式,您还可以选择是否要查看相对于捕获、视口或光标的标尺。

从层级 (Hierarchy) 下拉列表中,队列中心 (Queue Centric) 按队列对事件进行排序,而 线程中心 (Thread Centric) 按线程对事件进行排序。

使用热键擦洗帧 (Using Hotkeys to Scrub Through a Frame)
当擦洗器 (Scrubber) 具有焦点时,您可以使用以下热键将擦洗器光标从一个事件移动到另一个事件。
导航 |
|
---|---|
|
转到第一个事件。 |
|
转到最后一个事件。 |
|
转到上一个事件。 |
|
转到下一个事件。 |
|
展开当前事件组(仅限 HUD)。 |
|
折叠当前事件组(仅限 HUD)。 |
|
当前事件:显示更少信息(仅限 HUD)。 |
|
当前事件:显示更多信息(仅限 HUD)。 |
缩放和平移 (Zooming and Panning) |
|
|
放大 X 轴 (Zoom in X-axis) |
|
缩小 X 轴 (Zoom out X-axis) |
|
重置缩放 (Reset zoom) |
|
增加行高(所有行)(Increase row height (all rows)) |
|
减小行高(所有行)(Decrease row height (all rows)) |
|
平移 (Pan) |
|
查看缩放窗口 (View zoom window) |
光标和选择 (Cursor and Selection) |
|
|
设置光标(将光标放置在最接近范围开始的点。)(Set cursor(Places cursor at closest point to the start of a range.)) |
|
选择行(选定的行以橙色突出显示。)(Select row (The selected row is highlighted in orange.)) |
|
进行范围选择 (Make range selection) |
|
缩放至范围 (Zoom to range) |
|
打开 API 检查器 (Open API Inspector) |
CTRL + A |
选择所有事件 (Select all events) |
为了移动擦洗器光标的目的,以下被认为是动作事件
绘制方法 (Draw methods)
清除方法 (Clear methods)
分派方法 (Dispatch methods)
呈现方法 (Present methods)
例如,如果您正在查找调用的下一个绘制方法,您可以按键盘上的 CTRL + 向右箭头 (RIGHT ARROW) 来跳过通常不感兴趣的事件,而只在被认为是动作事件的事件上停止。
着色器分析器 (Shader Profiler)
着色器分析器 (Shader Profiler) 是一种用于分析 SM 限制工作负载性能的工具。它可以帮助您(作为开发人员)识别着色器停顿并因此降低性能的原因。通过着色器分析器提供的数据,您可以从高层和低层两个层面研究如何从着色器中获得更高的性能。
要访问此视图,请转到 帧调试器 (Frame Debugger) > 着色器分析器 (Shader Profiler)。
您还可以通过 UI 中的多个控件,通过有针对性的操作来执行着色器分析
从链接程序视图 (Linked Programs View) 中,右键单击着色器时。
从 API 检查器 (API Inspector) 中,导航着色器管线状态时
从事件列表视图 (Event List View) 中,右键单击事件或范围时
注意
着色器分析器报告可以导出和保存,以供将来参考或与同事共享。要保存报告,请单击报告左上角的保存图标。
章节 (Sections)
着色器分析器 (Shader profiler) 具有以下选项卡式章节
摘要 (Summary):本节显示有关分析运行的顶级摘要信息。您可以从中了解分析范围内着色器的性能。
源代码 (Source):本节报告着色器每行性能的细分。它包括多种可视化模式,包括高级源代码报告以及高级源代码与低级代码的并排关联。
会话信息 (Session Info):报告有关分析会话的信息,包括分析的事件、所需的次数、有关采样的应用程序的信息以及分析会话的收敛性。
摘要选项卡 (Summary Tab)
摘要选项卡显示有关分析运行的顶级摘要信息。它包含以下部分
着色器 (Shaders): 本节提供分析范围内使用的着色器的分层细分。它是了解着色器性能的主要切入点。
自顶向下调用 (Top-Down Calls):本节提供高级函数 (HLSL / GLSL) 及其调用的子函数的分层细分。它对 着色器 (Shaders) 中的选择是上下文相关的。
热点 (Hot Spots):本节报告发现顶级停顿的源代码行。它对 着色器 (Shaders) 中的选择是上下文相关的。
光线追踪实时状态 (Ray Tracing Live State):本节报告光线追踪应用程序的光线追踪实时状态信息。它对 着色器 (Shaders) 中的选择是上下文相关的。
事件 (Events):本节报告发现顶级停顿的事件,按 GPU 时间排序。它对 着色器 (Shaders) 中的选择是上下文相关的。
指令混合 (Instruction Mix):本节提供着色器中指令类型、输入依赖性和输出停顿位置的细分。它对 着色器 (Shaders) 和 源代码选项卡 (Source Tab) 视图中的选择是上下文相关的。
着色器 (Shaders)
本节提供分析范围内使用的着色器的分层细分。它是了解着色器性能的主要切入点。

本节显示一个表格,其中包含范围内的所有着色器以及每个着色器的性能。在根目录下,有一个“会话 (Session)”元素,表示整个范围的所有样本。在其下方,着色器将根据视图的 分组依据 (Group By) 设置进行分组。按 着色器 (Shader) 分组将展平树;按 管线 (Pipeline) 分组将根据样本所属的管线分层布局所有样本。
信息面板的左侧显示了您可以用以对每个着色器进行分类的信息。
类型 (Type):指示下方元素的层级类型。
名称 (Name):收集结果的着色器/管线的名称。
哈希 (Hash):显示应用程序级别着色器信息(例如,字节码)的唯一哈希值。
# Warp:指示最大理论 Warp 占用率。在着色器实例级别,如果此着色器在隔离状态下运行,则这是可以同时容纳在一个 SM 中的最大 Warp 数量。在管线级别,它显示所有着色器阶段的着色器实例的值范围。将鼠标悬停在此单元格上,以获取一个工具提示,报告哪些资源限制了理论 Warp 占用率。当动态条件(例如,图元数量)影响计算时,将显示两个极端情况的值范围。
# Reg:指示着色器所需的每个线程的寄存器数。
Smem:指示每个 Warp 的 3D 着色器所需的属性字节数,或每个线程组的计算着色器分配的共享内存。
CTA Dim:指示着色器使用的线程组大小(即,HLSL numthreads,GLSL local_size,Hull / 曲面细分控制 patch_size)。
关联性 (Correlation):报告读取已分析着色器的调试和关联信息的成功或失败。将鼠标悬停在此单元格上,以获取一个工具提示,报告有关操作的详细信息,包括读取调试信息的文件。
文件名 (File Name):生成此着色器的文件。
中心右侧显示相关行的性能,包括每行的顶级停顿和所有停顿原因。
有关停顿原因的完整列表和描述,请参见 停顿原因 (Stall Reasons)。
在采样时,某些样本可能报告为 未归因 (Unattributed)。此行中的样本要么关联失败,要么表示此采样器未报告的 GPU 内部操作。这些样本通常可以忽略,除非结果数量很大,在这种情况下,我们建议您保存此报告,并将此问题传达给 Nsight Graphics 团队。
样本 (Samples):报告为此行收集的样本总和。
顶级停顿 #1 (Top Stall #1):报告相关行发生率最高的停顿原因。
顶级停顿 #2 (Top Stall #2):报告相关行发生率第二高的停顿原因。
顶级停顿 #3 (Top Stall #3):报告相关行发生率第三高的停顿原因。
最右侧显示相关行的执行计数器,包括指令执行计数、线程指令执行计数和线程发散。
执行的指令 (Instructions Executed):报告执行的指令数。
线程指令执行 (Thread Instructions Executed):报告所有线程执行的指令总和(最多为 32 * “执行的指令 (Instruction Executed)”,因为每个 Warp 有 32 个线程)。
线程指令执行 Pred On (Thread Instructions Executed Pred On):与“线程指令执行 (Thread Instructions Executed)”相同,但仅计算基于谓词的线程(基于谓词的线程执行当前指令,而基于谓词关闭的线程跳过它)。
每个 Warp 的活动线程 (Active Threads Per Warp):报告线程发散,即每个指令执行的平均基于谓词的线程数。
每个 Warp 的活动线程 (Active Threads Per Warp) = 线程指令执行 Pred On / (执行的指令 (Instructions Executed) * 32)
注意
默认情况下,某些列是隐藏的。可以通过右键单击表格的标题来切换列的可见性。
火焰图 (Flame Graph)
本节提供软件执行的可视化。它基于函数调用,而根函数显示为底部对齐的彩色条,调用的函数递归地堆叠在根函数之上。它仅在 输入着色器字节码具有调试信息 时可用。(例如,为 dxc 编译 DXIL 字节码添加“/Zi”选项)

每个彩色条代表一个函数。条的宽度与样本数/执行计数器成正比。
y 轴显示函数调用深度,从底部的根到顶部的叶进行排序。
x 轴显示跨不同着色器的样本/执行计数器的大小。
通过单击彩色条或上下文菜单中的 转到… (Go To…) 操作,与 源代码 (Source)、自顶向下调用 (Top-Down Calls) 和 自底向上调用 (Bottom-Up Calls) 进行交互。
通过单击上下文菜单中的动作 显示蝴蝶视图 (Show Butterfly View),聚焦于一个函数并显示调用者和被调用者。
通过单击上下文菜单中的 聚合所有调用 (Aggregate Across all Calls),聚焦于一个函数并将来自每个实例的样本聚合到一个根节点中。
自顶向下调用 (Top-Down Calls)
本节提供高级 (HLSL / GLSL) 函数及其调用的子函数的分层细分。它仅在 输入着色器字节码具有调试信息 时可用。(例如,为 dxc 编译 DXIL 字节码添加“/Zi”选项)样本/执行计数器聚合到函数级别。可以单击链接以导航到函数定义的源代码行或函数在 源代码 (Source) 部分中被调用的位置。

函数 (Function):函数的名称。展开以查看它调用的其他函数。
调用位置 (Call Location):调用此函数的文件和行。
自底向上调用 (Bottom-Up Calls)
与 自顶向下调用 (Top-Down Calls) 类似,本节提供高级 (HLSL / GLSL) 函数及其调用者函数的分层细分。它仅在 输入着色器字节码具有调试信息 时可用。(例如,为 dxc 编译 DXIL 字节码添加“/Zi”选项)样本/执行计数器聚合到函数级别。可以单击链接以导航到函数定义的源代码行或函数在 源代码 (Source) 部分中被调用的位置。

函数 (Function):函数的名称。展开以查看在哪些函数中调用了它,并找出来自不同调用者函数的样本/执行计数器的权重。
调用位置 (Call Location):调用此函数的文件和行。
热点 (Hot Spots)
本节报告发现顶部停顿的源代码行。双击此表中的行可以导航到Source(源代码)部分中相应的源代码行。还可以通过更改 Type(类型)选择在高层和中/低层之间切换显示。

Shader(着色器):此行所属的着色器。
Source Location(源代码位置):此热点的文件和行号。展开可查看调用路径。
Function(函数):此热点所属的函数名称。
Source(源代码):特定热点的源代码。
光线追踪实时状态
本节报告光线追踪应用程序的光线追踪实时状态信息。单击此表中的 Source/IL 位置链接可以导航到 Source(源代码)部分中相应的 Source/IL 行。
在 (HLSL) TraceRay 或 (GLSL) traceRayEXT 调用之前初始化,并在调用之后使用的变量是 Live State(实时状态),需要在调用期间维护这些状态,同时调用命中和未命中着色器。为了提高性能,我们建议尽量减少实时状态的数量。

Name(名称):显示调用点/调用上下文/实时值名称(标识符)。
Source Location(源代码位置):报告此实时状态信息来源的源代码位置。
Live State Bytes(实时状态字节数):报告此实时状态信息的大小。
Live State Values(实时状态值数量):报告在特定位置重新加载/定义的实时值数量。
Samples(采样数):报告相关光线追踪调用的成本,包括实时状态加载,但不包括实时状态加载使用者的延迟惩罚。
Source Preview(源代码预览):显示特定实时状态信息的源代码预览。
IL Preview(IL 预览):显示特定实时状态信息的 IL 预览。
事件
本节报告发现顶部停顿的事件,按 GPU 时间排序。它对 Shaders(着色器)中的选择上下文敏感。每个事件行中都有一个链接,指向与选择相关的事件。这允许您在选定的着色器与资源、状态以及使用该着色器的命令之间建立关联。

指令混合
指令混合视图提供了着色器中指令类型、输入依赖和输出停顿位置的细分。它对 Shaders(着色器)和 Source(源代码)视图中的选择上下文敏感。
指令混合视图对于浏览指令级依赖关系非常有用。可变延迟指令(例如内存访问、超越数学函数和 Warp 级图元)称为 scoreboard producers(记分板生产者)。使用记分板生产者结果或重用记分板生产者寄存器的指令称为 scoreboard consumers(记分板消费者)。诸如“long scoreboard”(长记分板)之类的停顿原因出现在记分板消费者指令上,但实际上是由相应的记分板生产者指令引起的。
本节包含三个表
Self Instruction Mix(自指令混合):此表提供了指令类型细分以及当前选择中每个指令类型的采样数。每个子项都包含一个超链接,可以单击该链接跳转到 Source View(源代码视图)中的相应位置。
Input Dependencies(输入依赖):此表提供了当前选择所依赖的记分板生产者指令类别列表。每个子项都包含一个超链接,可以单击该链接跳转到 Source View(源代码视图)中记分板生产者的位置。
Output Stall Locations(输出停顿位置):此表提供了当前选择中记分板生产者指令类别列表。每个子项都包含一个超链接,可以单击该链接跳转到 Source View(源代码视图)中给定记分板的消费者。
每个表都具有相同的可用列
Pipe(管线):用于处理指令的硬件管线。
Family(族):指令执行的工作类型。
Operation(操作):指令执行的给定工作类型的操作类型。
Samples(采样数):归因于指令类别或位置的采样数。
Instructions(指令数):与给定类别或位置对应的指令数或指令混合。
该视图提供了调整数据显示方式的控件
Filter by Summary Selection(按摘要选择筛选):如果选中,结果将反映 Shaders(着色器)视图上当前选定的项目;否则,将忽略选择,并显示所有着色器的结果。这不会影响在 Source(源代码)视图中显示的数据。
Auto-Expand Items(自动展开项目):如果选中,所有顶层单元格将自动展开以显示带有超链接的子项。
Show All Source Locations(显示所有源代码位置):如果选中,所有源代码位置将作为每个顶层单元格的子项列出;否则,仅显示采样数最多的前 3 个位置。

源代码标签页
本节报告着色器每行性能的细分。它包括多种可视化模式,包括高级源代码报告、并排高级源代码到低级相关的对比,以及通过混合模式视图在低级源代码中交错显示高级源代码。
有一些顶层控件可以控制查看哪个着色器以及如何查看该着色器。

Shader(着色器):选择您要查看的着色器。
Languages(语言):更改源代码显示以显示高级语言、低级语言,或者并排显示高级语言和低级语言。
Source(源代码):由于着色器可以从主文件和多个包含文件编译而来,因此此选择器允许您选择要调查的特定源文件。
Interleaving Mode(交错模式):控制高级源代码如何在视图中交错显示(仅适用于低级源代码视图)。

选择着色器和视图后,您可以使用多种导航工具在着色器源代码中导航。

Find(查找):输入要查找的文本字符串。这对于查找变量、方法或寄存器名称非常有用。
:导航到相应停顿原因列中具有最高值的行
:导航到相应停顿原因列中具有次高值的行
:导航到相应停顿原因列中具有次低值的行
:导航到相应停顿原因列中具有最低值的行
对于许多用例,您可能希望首先导航到最高值,然后逐步导航到较高的值,直到您计划好下一步操作。
除了使用上面的导航按钮外,您还可以使用带有嵌入式热图的滚动条来识别源代码文件中高采样数区域。
要复制行,请选择相关行,然后使用系统快捷键复制到剪贴板。可以使用 Shift+单击选择多个连续行;可以使用 Ctrl+单击选择单个行。

源代码导航
Go Backward / Forward(后退/前进):导航到源代码文件中的上一个或下一个位置。

Go To Definition(跳转到定义):从调用函数的位置导航到函数的定义。函数调用显示为超链接。

Go To Top-Down / Bottom-Up Calls(跳转到自顶向下/自底向上调用):右键单击超链接,您可以转到 Top-Down Calls(自顶向下调用)或 Bottom-Up Calls(自底向上调用)中的相应项目。

会话信息
本节报告有关分析会话的信息,包括分析的事件、所需的轮次数以及分析会话的收敛情况。
Collection Statistics(收集统计信息)指示有关收集过程以及收集如何收敛的信息。
Pass Count(轮次计数):收集采样的轮次数。
Total Samples(总采样数):此会话中收集的总采样数。
Error (min)(误差(最小值)):给定停顿类型采样数百分比的平均值的标准误差。这用于获得对已执行足够轮次的信心。此值为看到的最小误差。
Error (max)(误差(最大值)):与 Error (min) 类似,但报告看到的最高误差。
Error (average)(误差(平均值)):与 Error (min) 类似,但报告看到的平均误差。
Configuration(配置)部分报告有关会话的关键信息,以便您可以了解会话是从哪个应用程序和配置中收集的。如果您从不同范围和应用程序配置中收集多个报告,则此部分可能很重要。
Events(事件)部分列出了此范围内采样的所有 API 事件。
针对 SM 限制工作负载的着色器分析
Shader Profiler(着色器分析器)是用于分析 SM 限制工作负载性能的工具。它可以帮助您(作为开发人员)识别着色器停顿并因此降低性能的原因。借助着色器分析器提供的数据,您可以从高层和低层调查如何从着色器中获得更高的性能。Shader Profiler(着色器分析器)目前处于 D3D12 和 Vulkan API 的 Beta 测试阶段。

如何使用它?
可以从工具中的多个位置启动 Shader Profiler(着色器分析器)。由于 Shader Profiler(着色器分析器)的目标是着色器的性能,我们建议在 GPU Trace(GPU 跟踪)识别出特定范围受着色器限制时启动 Shader Profiler(着色器分析器)。一旦识别出来,您可以通过 Frame Debugger(帧调试器)> Shader Profiler(着色器分析器)打开 Shader Profiler(着色器分析器),以收集和呈现 Shader Profiler(着色器分析器)报告。
它是如何工作的?
Shader Profiler(着色器分析器)的工作原理是通过重复运行重放中的着色器代码,并使用专用硬件采样器来确定代码停顿的原因。重复运行允许捕获统计有效的采样,以确保您获得可靠的、可操作的分析。采样实验完成后,将生成一份报告,使您能够查找和处理着色器管道中的关键热点。
报告包含多个部分,包括在采样的范围内处于活动状态的所有着色器的汇总、该范围内采样的高级、选择敏感的 Sample Summary(采样摘要),以及 Hot spots view(热点视图),用于识别在整个范围内贡献最多采样的关键行。该报告还提供报告会话和应用程序信息的标签页,以及 Source(源代码)标签页,该标签页允许逐行映射采样命中的位置。
关键概念
着色器分析器应用于优化延迟受限的着色器。这些类型的着色器通常具有以下形式的特征
SM Activity(SM 活动)和 SM Occupancy(SM 占用率)很高。(如果不是,请先改进这些。)
SM Throughput(SM 吞吐量)很低。
Cache Throughputs(缓存吞吐量)(L1TEX、L1.5、L2)较低或中等。
如果 SM Throughput(SM 吞吐量)很高,则着色器很可能是计算受限的,最好通过 GPU Trace(GPU 跟踪)工作流程来解决。
平均 Warp 延迟是平均 Warp 在 GPU 上驻留的周期数。Samples%(采样数百分比)表示给定着色器、函数或 PC 占用的平均 Warp 延迟的百分比。按 Samples(采样数)排序可以显示对延迟贡献最大的代码区域。在识别出延迟贡献最大的因素后,通过检查停顿原因来确定后续步骤。
停顿报告在 Warp 无法取得进展的 PC 处。在许多情况下,这是由于先前指令的执行或数据依赖性造成的。例如,以下代码可能会在消耗 texResult
的代码行上报告大量采样,但真正的罪魁祸首是数据生产者 g_MeshTexture.Sample()
。
float4 texResult = g_MeshTexture.Sample(MeshTextureSampler, In.TextureUV);
Output.RGBColor = texResult * In.Diffuse;
请注意,采样可能会出现在已采用分支的阴影中,即在分支之后的指令上,即使该指令未执行 - 因为分支仍在采样时解析。
if (constantBuffer.ConditionWeExpectToBeFalse)
{
texResult = ...; // samples in the shadow of a branch
output = dot(color, textResult);
}
else
{
output = dot(color, constant); // expect all samples to fall here
}
停顿原因解释了 Warp 无法发出指令的原因。每个停顿原因都由一组不同的条件或指令引起;通过消除这些条件或将代码从一组指令转换为另一组指令,您可以减少停顿。
Barrier(屏障):计算 Warp 正在 GroupSync 处等待同级 Warp。
如果线程组大小为 512 个线程或更大,请考虑将其拆分为更小的组。这可以增加合格的 Warp,而不会影响占用率,除非共享内存成为新的占用率限制器。
检查是否所有 GroupSync 都是真正必要的。
Dispatch Stall(调度停顿):管道互锁阻止了选定 Warp 的指令调度。
如果调度停顿高于 5%,请向 NVIDIA 提交包含可重现案例的错误报告。
Drain(排空):退出的 Warp 正在等待排空内存写入和像素导出。
LG Throttle(LG 节流):本地和全局内存指令的 LSU 管线的输入 FIFO 已满。
避免使用线程局部内存。
在局部作用域中声明了动态索引数组吗?
着色器是否具有过多的寄存器压力导致溢出?
消除冗余的全局内存访问(UAV 访问)。
数据组织:打包 UAV 或 SRV 数据,以允许 64 位或 128 位访问代替多个 32 位访问。
Long Scoreboard(长记分板):等待本地、全局、纹理或表面加载的数据依赖性。
找到生成正在等待数据的指令或代码行;该指令是罪魁祸首。
考虑将查找表转换为计算。
考虑将所有线程读取相同地址的全局读取转换为常量缓冲区读取。
如果 L1 命中率较低,请尝试提高空间局部性(合并访问)。
如果 VRAM 吞吐量很高,请尝试提高空间局部性(合并访问)。
Math Pipe Throttle(数学管线节流):数学管线输入 FIFO 已满(FMA、ALU、FP16+Tensor)。
此停顿原因意味着计算受限。使用 GPU Trace(GPU 跟踪)最好地确定如何将计算移动到不同的执行单元。
Membar(内存屏障):等待内存屏障返回。
内存屏障由 GroupMemoryBarrier、DeviceMemoryBarrier、AllMemoryBarrier 及其 GroupSync 变体发出。
检查着色器中每个屏障的指定范围是否真正需要。组级屏障比设备级屏障解析速度快得多。
检查是否根本需要内存屏障。每个线程写入唯一 UAV 位置的计算着色器不需要内存屏障。
MIO Throttle(MIO 节流):MIO 的输入 FIFO 已满。
可能由本地、全局、共享、属性、IPA、索引常量加载 (LDC) 和解耦数学运算触发。
Misc(其他):未在其他地方涵盖的停顿原因。
Not Selected(未选择):Warp 符合条件但未被选中,因为另一个 Warp 被选中。
高“未选择”可能表明有机会增加寄存器或共享内存使用量(降低占用率),而不会影响性能。为更大的着色器复杂性或改进的质量敞开大门。
Selected(已选择):Warp 发出了指令。技术上不是停顿。
Short Scoreboard(短记分板):等待短延迟 MIO 或 RTCORE 数据依赖性。
TEX Throttle(TEX 节流):TEXIN 输入 FIFO 已满。
尝试发出更少的纹理获取、表面加载、表面存储或解耦数学运算。
检查着色器是否正在使用解耦数学运算(通常应避免)。
考虑将纹理查找或表面加载转换为全局内存查找 (UAV)。纹理可以接受每个周期 4 个线程的请求,而全局可以接受 32 个线程。
Wait(等待):等待耦合数学数据依赖性(FMA、ALU、FP16+Tensor)。

热点识别具有最多命中采样的顶部位置。此列表提供了一种可操作的方法,用于识别和跳转到给定报告的高影响区域。

Ray Tracing Live State(光线追踪实时状态)列出了光线追踪应用程序的光线追踪实时状态信息,并提供了一种可操作的方法,用于识别和跳转到给定报告的高影响区域。
在 (HLSL) TraceRay 或 (GLSL) traceRayEXT 调用之前初始化,并在调用之后使用的变量是 Live State(实时状态),需要在调用期间维护这些状态,同时调用命中和未命中着色器。为了提高性能,我们建议尽量减少实时状态的数量。

着色器分析器能够将收集到的采样与源代码级别的行相关联。这使您(作为用户)能够逐行确定代码的运行方式。支持两种类型的关联 - 高级着色器语言关联和 GPU 着色器汇编 (SASS) 关联。高级着色器语言关联准备着色器源代码的列表,并在其旁边绘制每个特定行上采样的图表。高级关联非常有效地将您定位到您最熟悉的代码,即着色器源代码本身。对于有权访问 Nsight Graphics 专业版的 Pro 构建版本,并且希望深入研究低级着色器汇编的用户,提供了用于单个指令采样关联的反汇编视图。对于非 Pro 用户,反汇编视图仍然显示指令范围关联。低级源代码关联视图允许交错显示高级源代码。可以通过 Interleaving Mode(交错模式)下拉菜单配置此功能。

链接程序视图
Linked Programs View(链接程序视图)列出了应用程序中的所有着色器。
要访问此视图,请转到 Frame Debugger(帧调试器)> Linked Programs(链接程序)。
如果应用程序尚未Shader(或其父程序或管道对象),它将在 Status(状态)列中显示
符号。
如果已使用着色器,则将为该着色器呈现选定的统计信息。
对于程序或管道对象,您可以通过按程序/管道名称左侧的 ► 按钮来查看单个着色器。展开后,您可以选择链接以打开着色器源代码的文本视图(如果可用)。

名称
这是着色器的名称。此名称是内部生成的,也可以由用户按 API 分配。
类型
着色器的类型:顶点、像素、计算等。
UID
指示关联管道或着色器的唯一对象 ID。
Context(上下文)
指示此着色器所属的应用程序上下文。仅在多上下文 OpenGL 应用程序上显示。
Status(状态)
此列显示着色器的当前状态。状态包括 Source or Binary(源代码或二进制),表示此着色器的源代码是否可用。此外,如果包含 SASS 文本,则表示我们拥有收集着色器性能指标所需的驱动程序级别二进制代码。
符号表示我们正在等待应用程序绑定着色器。
符号表示着色器性能指标正在计算中。
Debug Info(调试信息)
此列指示关联着色器的调试信息的可用性和加载状态。
File Name(文件名)
列出从中编译着色器的文件名,适用于提供此信息的调试信息的着色器。
App Hash(应用哈希)
此列显示应用程序级别着色器信息(例如字节码)的唯一哈希值。
# Reg(寄存器数)
此列给出程序使用的寄存器数。寄存器计数会影响飞行中的占用率/线程数。这可能不适用于所有着色器。
以下列仅对计算着色器有效
CTA Dim(CTA 维度)
指示着色器使用的 CTA 维度
Smem(共享内存)
指示为每个 Warp/线程的着色器分配的共享内存
# Barrier(屏障数)
指示着色器使用的屏障数
光线追踪检查器
Ray Tracing Inspector(光线追踪检查器)显示在使用光线追踪 API 运行应用程序时,在构建命令中指定的几何体。如果应用程序不使用这些 API,则该视图将不可用。
在光线追踪 API(例如 DXR 和 NVIDIA Vulkan Ray Tracing)中,加速结构是一种数据结构,描述在执行光线追踪操作时将追踪的完整场景几何体。此数据结构在以下链接中详细描述:https://developer.nvidia.com/rtx/raytracing/dxr/DX12-Raytracing-tutorial-Part-1 和 https://developer.nvidia.com/rtx/raytracing/vkray。
此数据结构是专门构建的,用于转换为在现代 GPU 上表现良好的应用程序特定数据结构。在构造此数据结构时,开发人员有责任正确构造结构并使用标志来识别其中的功能和性能特征。不用说,这可能是一个容易出错的操作。
Nsight Graphics Ray Tracing Inspector(Nsight Graphics 光线追踪检查器)允许您查看正在创建的结构、浏览这些结构并查看正在使用的标志。此外,您可以过滤和着色结构,以便从鸟瞰角度突出显示不同类型的几何体。
Ray Tracing Inspector(光线追踪检查器)通过来自资源缩略图或许多 Nsight 视图(例如来自 API Inspector(API 检查器)或 All Resources View(所有资源视图))的链接打开。例如,当擦洗到构建事件追踪光线调用时,可以从 API Inspector View(API 检查器视图)打开 Ray Tracing Inspector(光线追踪检查器)。当擦洗到这些事件时,该视图将呈现活动结构列表,其中包含打开每个结构的链接。
该视图是多窗格的 - 左侧显示加速结构的分层视图,中间显示结构的图形视图,右侧显示控件和选项。此外,左下方还提供性能分析部分。通过加速结构树视图的层次结构,呈现了顶层加速结构 (TLAS)、底层加速结构 (BLAS)、子实例、子几何体和内存大小。当选择特定项目时,名称、标志和此条目的其他元数据将在左下角的部分中列出。树中的每个项目都有一个复选框,允许禁用所选几何体或层次结构的渲染。双击项目将跳转到渲染视图中的项目,并自动调整相机速度以相对于所选对象的大小。

列 |
描述 |
---|---|
名称 |
层次结构中每一行的标识符。单击名称旁边的复选框以显示或隐藏所选几何体或层次结构。双击此条目可跳转到渲染视图中的项目。 |
# Prims(图元数) |
构成此几何体的图元数。 |
Surface Area(表面积) |
包围特定条目的 AABB 的总表面积计算。 |
Size(大小) |
此特定级别的内存使用量计算。将鼠标悬停在此条目上以查看工具提示,其中包含此层次结构级别及其下方子级的汇总内存使用量计算。 |
性能分析工具可在主视图的左下角访问。这些工具帮助识别 RTX Ray Tracing Best Practices Guide(RTX 光线追踪最佳实践指南)中概述的潜在性能问题。这些分析工具旨在全面了解可能表现出次优性能的加速结构。为了找到最佳解决方案,建议进行分析和实验,但这些工具可以更好地了解为什么一个结构比另一个结构性能差。
操作 |
描述 |
---|---|
Instance Overlaps(实例重叠) |
识别与其他实例重叠的实例 AABB。当实例世界空间 AABB 显着重叠时,考虑合并 BLAS 以潜在地提高性能。 |
Instance Heatmap(实例热图) |
进入热图模式,显示从当前视口中每个像素投射的光线所击中的实例 AABB 的近似数量。此模式提供了一种方便的方法来扫描场景中可能存在问题的几何体。 |
过滤和高亮
加速结构树视图支持几何体过滤以及突出显示与特定特征匹配的数据。每个几何体旁边的复选框允许在完全渲染、线框渲染和不渲染之间单独切换。将此功能与搜索相结合,使您可以识别感兴趣的几何体(当应用程序已命名其资源时按名称),并仅显示该几何体。
也可以通过在主图形视图中单击几何体实例来选择它们。此外,在主图形视图中单击鼠标右键可提供隐藏/显示所有几何体、隐藏所选几何体或隐藏除所选几何体之外的所有几何体的选项。

除了过滤之外,该视图还支持基于高亮显示的使用特定标志指定的几何体的识别。选中每个 Highlight option(高亮选项)将识别与该标志匹配的资源,并着色以方便识别。单击此部分中的条目将使所有 不 符合过滤条件的几何体变暗,从而使符合过滤条件的项目突出显示。选择多个过滤器需要通过几何体来满足所有选定的过滤器(例如,AND 逻辑)。此外,标题文本将更新以反映符合此过滤条件的项目的数量。

渲染选项
在高亮控件下,提供了其他渲染选项。这些选项包括控制几何体颜色的方法以及切换绘制 AABB 的能力。

性能分析
Ray Tracing Inspector(光线追踪检查器)具有许多工具,支持加速结构的性能分析。

导航 |
|
---|---|
|
禁用当前的性能分析模式 |
|
启用实例 AABB 重叠热图(世界空间) |
|
启用遍历时间热图 |
|
启用光线-图元相交热图 |
|
启用实例 AABB 重叠表 |
|
在当前和上一个性能分析模式之间切换 |
Instance AABB Overlap Heatmap (world space)(实例 AABB 重叠热图(世界空间))
此工具帮助识别世界空间 AABB 重叠,目的是帮助开发人员减少昂贵的重叠。

此热图叠加层显示在当前视口中任何方向上重叠的实例 AABB 的最大数量。命中的实例越多,颜色越热。热图阈值可以由“Heatmap Overlay Options -> AABB Threshold”(热图叠加选项 -> AABB 阈值)控制,并取决于重叠的实例 AABB 的数量。
当实例的世界空间 AABB 重叠时,可能需要不必要的 BLAS 遍历。如果这些重叠是由 BLAS 内的空白空间引起的,请考虑拆分 BLAS,以最大限度地减少此空白空间。如果这些重叠是由非不透明几何体引起的,请最大限度地减少未标记为不透明的区域,以提高性能。
Traversal Timing Heatmap(遍历时间热图)
此工具提供光线遍历时间的热图,旨在识别开销大的几何体。

此热图叠加层显示了从视口中每个像素的中心向最近的几何体命中追踪光线所需的 GPU 时钟周期数。热图阈值可以通过“Heatmap Overlap Options -> Timing Threshold”(热图重叠选项 -> 定时阈值)进行控制,并且取决于当前加速结构的遍历速度。
为了确定特定几何体如何影响光线遍历速度,可以隐藏几何体,在这种情况下,此算法将忽略它。此外,将“Heatmap Overlay Options -> Opacity Override”(热图叠加选项 -> 不透明度覆盖)设置为“Force Opaque”(强制不透明)将遍历加速结构,就好像所有几何体都是不透明的一样。
射线-图元相交热图
此工具提供光线几何体相交的热图,旨在识别开销大的几何体。

此热图叠加层显示了从每个像素中心追踪到场景中的光线击中的表面数量。击中的表面越多,颜色越热。在这种模式下,不透明几何体会终止光线。热图阈值可以通过“Heatmap Overlay Options -> Intersection Threshold”(热图叠加选项 -> 相交阈值)进行控制。当几何体未标记为不透明时,光线必须穿过该几何体的所有表面,直到击中不透明表面。为了最大限度地减少相交测试,请尽可能使用不透明几何体标志,或使用不透明度微映射来遮罩非不透明几何体的不透明部分。
实例 AABB 重叠表
此表提供有关重叠的信息,以便您在实例世界空间 AABB 显着重叠时考虑合并 BLAS。

当实例的世界空间 AABB 重叠时,TLAS 会变得非最佳。然后,光线可能会在空间中的一个体积内击中多个实例。然后需要遍历所有这些实例的 BLAS,以解析最近的命中。遍历一个合并的 BLAS 会更有效率。针对 BLAS 的追踪性能不取决于其中的几何体数量。合并到单个 BLAS 中的几何体仍然可以具有独特的材质。
导出
通过单击视图工具栏左上角的“保存”(磁盘)图标导出视图,可以将您收集的数据持久保存,超出即时分析会话的范围。此功能对于比较几何体的不同修订版本或与他人共享尤其有价值。书签也会被持久保存。一个示例用例是识别次优几何体,将其加入书签,并将此文档传递给关卡设计师或美工进行更正。
着色器定时热图视图
着色器定时热图视图显示 GPU 上的着色器执行时间。它显示一个热图图像,其中每个像素代表一个着色器执行单元的时间。颜色越暖(越红)表示着色器执行时间越长,而颜色越冷(越蓝)表示着色器执行时间越短。此显示使您可以轻松识别热点并为这些区域规划优化方案。
要访问着色器定时热图视图,请转到Frame Debugger(帧调试器) > Shader Timing Heatmap(着色器定时热图)。
如果当前事件是 DirectX 光线追踪或 Vulkan 光线追踪调用,它将立即开始收集着色器时间,并在所有内容加载完毕后显示它们。否则,它将显示一条注释,提示您选择合适的事件。
注意
目前,Nsight Graphics 仅支持收集 DirectX 光线追踪和 Vulkan 光线追踪应用程序中光线生成着色器的执行时间。
该视图包含多个部分。左侧有 API 信息、叠加控件和着色器定时表,右侧有热图查看器及其控件。

热图
热图查看器允许您使用鼠标左键选择矩形,使用鼠标中键平移,使用鼠标滚轮缩放。如果存在选定的矩形,则表格将显示选定矩形中的定时。
叠加
叠加控件允许您选择一个图像作为热图上的叠加层。

选择叠加图像后,您可以使用滑块调整不透明度。

颜色映射
在热图的右侧,有一个图例显示了定时值和颜色的映射。如果您想更改映射,请单击热图上最右侧的按钮并控制滑块。

导出
单击左上角的 Save(保存)按钮以导出视图。此视图支持保存会话、热图图像或保存表格内容。
D3D12 特定视图
D3D12 描述符堆
描述符堆视图显示当前事件绑定的所有描述符堆。
要访问此视图,请转到 Frame Debugger(帧调试器) > Descriptor Heaps(描述符堆)。

左侧是可用的描述符堆,右侧可以查看每个描述符堆的属性。在详细信息窗格的顶部,您可以看到描述符堆的填充程度,以及最大连续有效范围和无效范围。这些属性可以帮助您深入了解每个描述符堆,并将其用作诊断工具来查找应用程序中的任何潜在错误。
请注意,如果您单击“Resources”(资源)列中的超链接,它将打开资源查看器。
D3D12 堆视图
堆视图提供应用程序创建的所有堆的列表,以及有关每个堆中包含的资源的详细信息。

当您从左侧窗格中选择一个堆时,您将看到以下两种类型的条目之一:放置的资源或 图块。“放置的资源”框中的超链接将带您进入“资源”图形选项卡。
图块用于填充平铺资源的部分区域。

堆视图的右侧显示与所选资源关联的内存数据,这些数据也可以在“所有资源”视图的内存选项卡上看到。
堆图
堆图显示堆当前使用方式的高级布局。您可以按类型(例如,缓冲区、Texture2D 等)或按资源的名称查看使用情况。
类型

资源

堆图显示堆内的任何重叠区域。
D3D12 根参数
根参数视图显示当前事件绑定的所有根参数。这使您可以快速更改您从中采样的状态、常量以及其他描述符,其速率比过去的 API 更轻量、更快。
要访问此视图,请转到 Frame Debugger(帧调试器) > Root Parameters(根参数)。

根签名显示了该时刻绑定的结构的定义。根参数使用您从中采样的值和您使用的常量来填充该结构。
当您在左侧选择一个根参数时,右侧会显示该参数的根参数。这显示了驻留信息,任何无效的描述符都以红色显示。将根参数用作诊断工具可以帮助防止 GPU 故障。
请注意,如果您单击“Resources”(资源)列中的超链接,它将打开资源查看器。
Vulkan 特定视图
Vulkan 描述符集视图
描述符集视图显示应用程序在当前事件中当前分配和绑定的所有描述符集。
要访问此视图,请转到 Frame Debugger(帧调试器) > Descriptor Sets(描述符集)。

左侧窗格显示可选择的描述符集列表,以及它们的布局、池、消耗计数和动态偏移。
选择一个集合后,右侧窗格将显示当前与此描述符集关联的资源,以及与从中分配此描述符集的池相关的信息。此外,单击描述符集中的资源将显示有关该特定资源的更详细信息。
请注意,如果您单击 Preview(预览)列中的超链接,它将打开与此图像或缓冲区关联的资源查看器。
Vulkan 设备内存视图
设备内存视图提供应用程序分配的所有设备内存的列表,以及有关每个内存区域中包含的资源的详细信息。
要访问此视图,请转到 Frame Debugger(帧调试器) > Device Memory(设备内存)。

最左侧的窗格包含有关当前分配的所有设备内存对象的信息。选择设备内存对象后,包含的资源将列在中间窗格中,资源布局图位于左下方,包含的数据位于右侧。
Vulkan 内存池
内存池视图提供应用程序分配的所有设备内存的列表,以及有关每个内存区域中包含的资源的详细信息。

最左侧的窗格包含有关当前分配的所有设备内存对象的信息。选择设备内存对象后,包含的资源将列在中间窗格中,资源布局图位于左下方,包含的数据位于右侧。
Vulkan 纹理和采样器池
纹理和采样器池视图提供了这些不同池类型的可视化。这对于确定特定资源集是否在它们期望所在的资源池中非常有用。左侧允许您根据类型选择您感兴趣的池。列表中包含有关池是如何创建的适当参数。右侧是资源描述符列表、有关资源本身的一些信息以及缩略图预览。缩略图下方有一个链接,允许您在资源查看器中打开该资源以进行更深入的检查。
要访问此视图,请转到 Frame Debugger(帧调试器) > Texture and Sampler Pools(纹理和采样器池)。

生成 C++ 捕获 UI
编译和启动 C++ 捕获

ngfx-cppcap 文件的附加功能包括
从原始应用程序拍摄的捕获的屏幕截图
有关捕获的应用程序及其原始系统的信息
有关捕获的 API 流的统计信息
用于构建 C++ 捕获或打开关联的 CMake 项目的实用程序
启动已编译应用程序的实用程序
执行 按钮将启动已编译的可执行文件。
连接… 按钮将填充一个新的连接对话框,允许您在生成的捕获上运行特定的活动。
持久保存在此文件中的用户评论。
GPU 追踪 UI
GPU 追踪分析实时应用程序。追踪完成后,数据将保存在追踪文件中,并且可以在安装了 NVIDIA Nsight Graphics 的任何计算机上离线分析,而无需安装特定的 GPU 或运行分析的应用程序。
GPU 追踪窗口最多由 8 个主要部分组成
用于在时间线视图和着色器源视图之间切换的选项卡。

时间线控制方案
GPU 追踪时间线视图提供了各种控件来选择和交互呈现的数据。
绑定 |
命令 |
---|---|
|
选择事件 |
|
选择事件并缩放 |
|
多选事件 |
|
新建时间跨度选择 |
|
添加时间跨度选择 |
|
擦除时间跨度选择 |
|
缩放到选择 |
|
水平平移 |
|
水平平移 |
|
垂直滚动 |
|
放大/缩小 |
|
事件行标题上下文菜单 |
|
事件上下文菜单 |
|
指标行标题上下文菜单 |
|
移动行 |
追踪工具栏
在时间线视图的左上方,有 6 个按钮扩展了时间线的功能

标尺相对:控制标尺的零点。可以是
追踪:零点是追踪开始的时间。
视口:在这种模式下,如果您选择一个范围并展开它,则所选范围的开头将是标尺的零点。
光标:零点是鼠标所在的位置。
追踪分析:请参阅 追踪分析。
追踪比较:请参阅 追踪比较。
- 队列行层级切换:在现代图形 API 中;操作、命令和标记可以在不同的队列上执行。
GPU 追踪根据事件执行的队列追踪这些事件,并默认根据此层级结构显示它。为了获得更好的粒度,可以将此视图从层级模式切换到平面模式。平面模式可用于固定、移除和重新排列单个队列子行。
叠加:切换不同的叠加层,请参阅 Barrier Overlay(屏障叠加层)和 Subchannel Switch Overlay(子通道切换叠加层)。
其他选项
聚合帧:仅当报告包含多个帧时才支持此选项,并且打开此选项会激活聚合模式。在此模式下
时间线仅显示第一帧。
GPU 追踪中显示的指标值(指标选项卡和时间线工具提示)是在所有帧上平均的值(将鼠标悬停在值上会显示一个工具提示,显示用于计算平均值的原始值)。
帧之间差异很大的值以灰色显示。确定此差异的阈值在设置中可用。
当分析包含多个帧的报告时,此模式非常有用,可以查看平均数据并最大限度地减少帧变化的影响。
在时间线视图的右上方,有一些按钮控制缩放级别。这些按钮可以帮助您在时间线中导航到所需的视图。
开始 / 结束:标记开始和结束选择的确切时间。
重置缩放:将重置整个追踪的时间线缩放。
缩放到选择:将缩放到选定范围。当选择由多个不连续的时间跨度组成时,不可用。
时间线:帧数据和每队列事件
帧行
GPU 追踪允许您在单个追踪中收集最多 15 个连续帧。帧行显示帧执行边界。双击帧将自动将时间线缩放到帧边界。

每队列事件
NVIDIA GPU 包含多个提供专门功能的独立引擎。这些引擎(例如,图形、计算和复制)可以并行执行工作,并且工作可以提交到单独的队列中。
在 GPU 追踪时间线中,您可以观察在整个帧执行过程中发生的动作和事件,根据它们提交到的队列。时间线的每队列部分呈现事件、用户标记和动作。
队列同步对象
由于工作可以在单独的队列中提交,因此图形 API 支持队列之间工作的同步。GPU 追踪捕获揭示了何时执行与队列相关的 Wait(等待)和 Signal(信号)命令。选择此类同步对象栏后,将绘制一条连接到相关事件的线。这使得很容易理解何时触发等待事件,何时信号事件释放了它,以及队列处于“等待”状态的时间长度。

资源屏障
GPU 追踪可以捕获资源屏障调用。这些调用在同步行中显示为附加事件,与它们触发的队列相关。

使用“Overlays”(叠加)菜单下的“Overlay Barriers”(叠加屏障)切换按钮来查看资源屏障事件如何影响指标图表数据

子通道切换叠加层
当应用程序在单个队列中提交一系列不同工作类型(例如,Draw,然后是 Dispatch)时,硬件可能会在它们之间插入一个隐式屏障。此隐式屏障称为子通道切换;它涉及前端的流水线刷新和等待空闲,从而阻止跨屏障的并行性。要识别这些屏障在时间线上发生的位置,请在“Overlays”(叠加)菜单下,启用“Subchannel Switches”(子通道切换)复选框。此功能在 NVIDIA Ampere 和 Ada 架构 GPU 上可用。在 NVIDIA Blackwell 架构 GPU 和更新的 GPU 上;子通道切换不会发生在 3D 和计算工作负载之间,因此叠加层不适用于这些架构。

使用“Overlays”(叠加)菜单下的“Overlay Subchannel Switches”(叠加子通道切换)切换按钮来查看子通道切换如何影响指标图表数据

用户标记
GPU 追踪还收集应用程序中存在的任何 User Markers(用户标记),并将它们显示在执行它们的相应队列上。这可能有助于理解帧工作流程。GPU 追踪支持 API 特定的标记以及通过 NVIDIA Tools Extension SDK 生成的 NVTX 标记。

动作行
动作行显示工作提交动作,与执行时间和执行队列相关联。
命令列表(或命令缓冲区)提交调用也显示在动作行中。在这种情况下,文本还显示调用中提交的命令列表的数量。

时间线:指标图表
指标数据行可以使用性能监视器跟踪 NVIDIA GPU 硬件单元的活动。GPU 追踪使您能够收集此数据并详细观察帧执行期间的硬件利用率。
注意
为了更深入地了解您可以从此数据中得出哪些操作项,建议阅读以下博客
用于优化任何 GPU 工作负载的峰值性能百分比分析方法
https://devblogs.nvidia.com/the-peak-performance-analysis-method-for-optimizing-any-gpu-workload/
当您将鼠标悬停在时间线上时,将出现一个工具提示,其中显示每个选定时间的指标数据的平均值。数据从高到低排序

GPU 单元的指标数据行
GPU 追踪呈现了在整个帧执行过程中收集的硬件单元的指标数据。此数据在时间线中呈现。每个计数器数据都在特定行中呈现,而某些计数器为了方便起见被分组。将鼠标悬停在指标的名称上,将显示一个包含计数器描述的工具提示。可以展开组行以查看各个计数器。
工具提示显示鼠标指向的特定时间的计数器数据,或选定范围的平均计数器值。
处理时间线中的行
GPU 追踪收集大量数据。可以排列时间线,使其更好地满足您当前的需求,并使您能够专注于您感兴趣的区域。
移除行
通过单击红色 -
方块,移除不是主要关注点的行,从而专注于您的性能分类操作。

单击红色 -
方块将从时间线视图中移除该行,但不会从数据库中删除数据。您可以通过单击时间线底部的绿色 +
方块将该行添加回时间线。
更改行位置
您可以通过按 Alt + 鼠标左键单击并将行拖动到所需位置来更改指标数据行的位置。
固定行选项
GPU 追踪时间线允许您固定行。当鼠标悬停在该行上时,将弹出一个固定按钮。如果您单击此行,它将自动移动到时间线的顶部,并在向下滚动其他行时保持锚定。您可以选择固定多行。此信息将被保存,以便在重新打开报告时,设置将保持不变。在下面的示例中,标记行被固定,这将使您能够保持标记行可见

用户范围
用户范围是可以添加到 GPU 追踪报告并进行编辑的范围。这可以用作个人注释并增强性能分类功能。
要添加用户范围
使用“SHIFT + 鼠标右键单击”在“User Ranges”(用户范围)行中选择一个范围。
在弹出的对话框中添加您的标签和描述。
按“确定”。
在文件名旁边,有一个星号 (*),表示此报告已被编辑。
您可以使用鼠标右键单击菜单编辑或移除范围。
用户范围的作用类似于任何其他范围,其数据会相应地反映在“Summary”(摘要)和“Metrics”(指标)选项卡中。

事件列表
GPU 追踪事件列表视图显示应用程序发出的 API 调用的子集(与 GPU 性能相关)。它允许您更轻松地识别特定的 API 调用并在时间线上找到其持续时间。事件列表可通过视图顶部的文本编辑进行搜索和过滤。

事件详细信息
GPU 追踪事件详细信息视图显示事件列表视图中选定事件的 API 参数。参数以与分层结构中所选事件相同的顺序列出。事件详细信息可通过视图顶部的文本编辑进行过滤。

指令混合
指令混合视图提供了着色器中指令类型、输入依赖性和输出停顿位置的细分。它对 Timeline(时间线)和 Source(源)视图上的选择上下文敏感。有关更多信息,请参阅 着色器分析器指令混合。

实时着色器分析器选项卡
实时着色器分析器视图提供了对着色器性能的高级洞察,可用于跳转到源视图中的源代码。它对 Timeline(时间线)视图上的选择上下文敏感。有关更多信息,请参阅 着色器分析器部分。

着色器分析器视图中的线程发散
在 GPU 追踪中的着色器分析器视图中,可以使用每个 Warp 的活动线程直方图。使用此直方图来识别由于分支发散或启动的线程数量次优而导致性能损失的着色器、函数和源代码行。直方图右侧的值(更接近 32)表示更高效的指令执行。

着色器源
启用 Collect Shader Pipelines(收集着色器管线)后,时间线将显示第二个选项卡,名为 Shader Source(着色器源)。切换到此选项卡将隐藏时间线,而是显示着色器的源级别视图。如果还启用了 Real-Time Shader Profiler(实时着色器分析器),则着色器源将包含额外的分析信息。有关更多信息,请参阅 着色器分析器 部分。

启用实时着色器分析器后,时间线和着色器源视图下方的视图可用于在着色器中导航并查找优化机会。有关更多信息,请参阅 着色器分析器摘要选项卡 部分。

信息选项卡
信息选项卡部分提供有关捕获的常规信息,并提供有关捕获的指标数据的其他视图。
它包含 3 个选项卡
摘要选项卡
摘要选项卡的上半部分提供有关选定范围的详细信息。如果没有进行选择,则信息将与整个可见范围相关
开始:选定范围或可见范围的开始时间。
结束:选定范围或可见范围的结束时间。
持续时间:选定范围或可见范围的持续时间。
范围:指示相关数据是否适用于可见范围上的选定范围。

单元吞吐量摘要表
在此表中,您可以轻松查看选定范围的吞吐量单元的平均值。您可以将值从高到低排序。
Warp 占用率表
在此表中,您可以轻松查看 Warp 占用率计数器的平均值。
指标选项卡
指标选项卡封装了所有指标数据,并显示选定范围的平均值。您可以使用文本搜索栏轻松过滤和搜索所需的计数器。为此,只需键入计数器名称(或名称的一部分),表格将自动过滤。
指标根据它们代表的 GPU 单元/角色进行划分。
指标选项卡中的值会根据指标图表区域中相应的选定范围而变化。

捕获信息选项卡
“捕获信息”选项卡提供有关捕获的常规信息,例如 GPU 型号、CPU 和用于可执行文件和逗号行参数运行的操作系统。当尝试分析工作负载行为或重现问题时,这可能很有用。

请注意,如果在此捕获过程中发生任何警告或错误,它们将显示在此选项卡中。
分析视图
GPU 追踪提供 GPU 各个单元的占用率和吞吐量的实时分析追踪。使用“Throughput Metrics”(吞吐量指标)指标集,这些指标的数据在单个帧中收集。此数据为用户提供了 GPU 在一段时间内如何被占用的良好概览,并与用户标记、绘制/调度命令、命令列表执行和同步对象相关联。当使用“Multi-Pass Metrics”(多遍指标)时,会收集更多指标的数据,但这次是跨多个帧。在这种模式下,追踪不仅包含吞吐量和占用率数据,还包含停顿原因、内存使用情况细分等。此模式对于不仅了解限制单元,而且了解原因非常有益。但是,为了正确理解所提供的数据并解释它,需要深入了解 NVIDIA 硬件。GPU 追踪分析工具旨在通过分析所提供的数据并自动生成有关查看位置、应修复的潜在区域以及如何修复的建议,来简化最终用户的工作。分析模式包含由我们的顶级开发技术人员提供的 40 多个常见和高级用例和“经验教训”。该工具的目标是为追踪中的每个范围提供有关质量的可操作的见解。该工具将随着时间的推移而发展,并且将始终使用更多注释进行更新,这些注释将反映我们在进行性能分类时获得的经验。
分析排名和概念
分析工具包含许多分析追踪的规则和公式(限制器)。这些规则根据相关的 GPU 单元或角色进行分组。每个组可能包含一个或多个限制器。每个限制器都由指标数据组成,并具有“Projected range gain”(预计范围增益)和“Projected frame gain”(预计帧增益)。追踪分析根据预计帧增益对范围进行排名。建议首先查看标记的叶子,因为这样更容易专注于特定范围。当查看更大的“父”标记时,需要考虑到预计增益会更大,因为范围本身更大,并且可能在本质上对整体帧产生更大的影响。
先决条件
为了充分利用分析报告,请务必使用“Multi-Pass”Metrics”(多遍指标)生成追踪。您可以通过 2 种方式启用“Multi-Pass Metrics”(多遍指标)
选中 GPU 追踪项目设置中的“Multi-Pass Metrics”(多遍指标)复选框

如果 GPU 追踪会话已在运行,则可以在工具栏中选择启用“Multi-Pass Metrics”(多遍指标)

注意:由于“Multi-Pass Metrics”(多遍指标)从多个帧收集数据,因此您可以按照以下建议来帮助获得更准确的结果
确保没有其他应用程序正在运行。
确保选中“Lock Clocks to Base”(将时钟锁定到基本频率)选项。
建议在 C++ 捕获上运行或在可以的情况下暂停应用程序引擎。
还建议追踪 3 帧,以便“Aggregate”(聚合)模式适用。
激活分析视图
在使用“Multi-Pass Metrics”(多遍指标)在所需帧上进行追踪后,打开追踪文件。打开后,如果您追踪了多个帧,请选择聚合模式(也可以在分析视图中更改)。单击“Analyze”(分析)按钮,分析视图将在新选项卡中打开:(请注意,此功能目前仅在 Windows 上可用)
了解分析视图
分析视图分为 3 个主要部分(以及一个工具栏):标记树、时间线和分析视图。
工具栏区域
聚合帧
仅当跟踪了多个帧时,此选项才可用。 这提高了准确性,因为指标值是作为平均值计算的,并且减少了噪声的影响。
跳过 GPU 空闲间隙以获得帧增益
选中此项后,帧增益将根据不包含 GPU 空闲间隙的帧持续时间计算得出。 当分析 CPP 捕获帧时,这尤其方便,因为 CPP 捕获帧中可能存在一些人为的 CPU 工作范围,这些范围会导致 GPU 空闲并影响预计增益的计算。
仅为叶标记显示分析颜色
通常,在进行性能分类时,最好先关注叶节点,因为修复执行特定任务的代码更容易。 这就是分析工具首先对标记叶节点执行分析的原因。 此外,由于我们根据“预计帧增益”对标记进行排名,因此较大的标记自然可能会获得更高的排名。 如果您想对所有标记执行完整分析,请选中“仅为叶标记显示分析颜色”。
不同严重级别的图标图例
图标 |
说明 |
![]() |
表示最大预计帧增益在 10% 或更高的范围内 |
表示最大预计帧增益在 N% 左右的范围内,其中 N 是图标中出现的数字 |
|
表示最大预计帧增益小于 0.5% 的范围 |
|
表示最大预计帧增益为 0 或不可用的范围 |
请注意,“信息” 注释表示一系列具有“正常”值的指标。 注释的解释和指标值仍然可以帮助理解潜在问题。
标记树
标记树根据层级结构显示所有性能标记。 每个标记都有相关的图标、持续时间、标记持续时间占整个帧的百分比以及帧增益。
时间线
此视图在时间线上显示标记。 它有助于一目了然地了解帧在一段时间内的执行方式。 在此模式下,标记按潜在的帧增益进行颜色编码。 默认情况下,我们仅标记叶节点,因为我们建议首先开始对叶节点进行分类。
分析视图
这是分析的主要内容。 限制因素和公式分为多个类别。 每个类别代表 GPU 中的某个单元或单元集合。 分析视图中的每个选项卡代表一个这样的类别,如下图所示

类别按严重程度排序,因此更严重的类别位于左侧。 将鼠标悬停在类别名称上会在信息丰富的工具提示中显示该类别的本质。
每个类别包含一个或多个注释。 注释是一组具有某些对应逻辑的指标。 单击注释可查看相关的解释、建议(如果适用)以及潜在的帧增益。
您还可以查看计算此注释时考虑的指标、指标值和简短描述。
概述注释类别
概述类别是特殊的,并且始终是第一个要查看的类别。 它很好地指示了特定范围的总体性能以及吞吐量欠佳的主要单元。 它还遵循 Louis Bavoil 的博客中介绍和解释的峰值性能百分比 (P3) 分析方法:https://developer.nvidia.com/blog/optimizing-vk-vkr-and-dx12-dxr-applications-using-nsig
跟踪比较
跟踪比较工具使 GPU 跟踪用户能够轻松分析其代码更改对特定帧的影响。 它显示了 2 个帧的 GPU 跟踪时间线的简化版本。 这些帧一个叠放在另一个之上,它们的开始时间对齐。 跟踪比较能够比较来自 2 个不同 GPU 跟踪报告的 2 个帧,或单个报告中的 2 个帧。
启动跟踪比较工具
选项 1: 项目资源管理器
在资源管理器树中选择两个捕获文件,右键单击并选择跟踪比较

选项 2: 单击工具栏按钮。
跟踪比较对话框
跟踪比较对话框显示要比较的选定文件。 它还允许用户在多帧捕获的情况下从每个捕获中选择要比较的帧。

使用跟踪比较工具
跟踪比较在 GPU 跟踪时间线的简化版本中显示选定的帧,一个叠放在另一个之上,并对齐帧的开始时间。

标记也相关联,因此当您单击一个帧上的某个标记时,将选择另一个帧上的匹配标记(如果找到)。
对齐到标记
有时,当选定标记的开始时间对齐时,更容易发现差异。 选择特定标记,然后单击对齐匹配标记复选框以激活匹配标记的自动对齐。
对齐选择项
也可以手动对齐任何一对选择项。 在顶部和底部视图中选择任何标记、操作或其他范围。 然后按对齐选择项按钮以对齐视图上的选择项。
跟踪比较模式下的指标表
详细指标表在此模式下出现,并排显示每个帧的指标数据以及值之间的差异。
指标信息
跟踪比较工具显示每个跟踪的指标数据以及这些值之间的比率。
分析无帧应用程序
如果为跟踪的开始和结束设置了不同的条件,则 GPU 跟踪能够分析无帧工作负载。
配置 GPU 跟踪
要分析此类应用程序,请在 GPU 跟踪连接对话框中更改启动时间和限制时间设置。
将启动时间条件更改为以下选项之一
手动触发: 指定跟踪将由用户通过主机应用程序或运行应用程序上的 目标应用程序触发热键 手动触发。
提交计数: 跟踪将在执行选定数量的提交后自动启动。 指定 0 将跟踪所有提交。
经过时间: 跟踪将在经过选定的时间量后自动启动。
将限制时间条件更改为以下选项之一
最大提交数: 除了最大持续时间外,跟踪还将限制为设定的提交数。一旦满足 开始于 条件,跟踪将在下一次提交时开始。
无: 跟踪将仅受最大持续时间限制。一旦满足 开始于 条件,跟踪将在下一次提交时开始。
根据限制时间选项的选择,可能还需要更新最长持续时间设置。
像往常一样设置其余设置,提供可执行文件和路径、工作目录、命令行参数和环境变量。
收集跟踪
要收集跟踪,您只需按“启动 GPU 跟踪”按钮。 当 GPU 跟踪检测到受支持的 API 正在运行时,将自动收集跟踪。
打开 GPU 跟踪报告
收集跟踪后,只需打开生成的报告并像往常一样对其进行分析即可。
需要记住的事项
分配的时间戳
GPU 跟踪是一个详细的分析器,它收集大量指标数据,因此,它在分析会话持续时间方面受到限制。 分配的时间戳设置会影响 GPU 跟踪将分配用于跟踪 GPU 事件的缓冲区大小。 如果您在输出消息窗口中收到错误消息,指出资源已用完,您可能需要尝试增加分配的时间戳的数量。
应用程序已断开连接
GPU 跟踪主机启动目标应用程序并对其进行分析。 在此模式下,目标应用程序可能会自动退出。 应用程序结束后,即使跟踪已正确收集,您也可能会收到警告消息,指出与目标的通信已丢失。
其他捕获选项
Nsight Graphics 框架允许使用一组特定的命令行参数和/或环境变量启动应用程序。 这通过“连接到进程”对话框完成。
以下是特殊的预定义环境变量
在 X 帧数后自动捕获
设置 WARPVIZ_CAPTURE_ON_FRAME 以在经过 X 帧数后自动触发捕获。
例如
WARPVIZ_CAPTURE_ON_FRAME=100 将在 100 帧后自动触发一次捕获。
每经过 X 帧数重复自动捕获
设置 WARPVIZ_CAPTURE_FRAME_INTERVAL 以每经过 X 帧自动触发捕获
例如
WARPVIZ_CAPTURE_FRAME_INTERVAL=100 将每 100 帧触发一次捕获。
将时钟锁定到基准
为了在不同捕获之间获得更好的一致性,GPU 跟踪以“将时钟锁定到基准”的方式运行目标应用程序。 这意味着应用程序不会以最大速度运行,但在运行之间会更加一致。 如果需要以最大速度进行分析,请将其关闭。

使用多通道指标进行跟踪
GPU 跟踪在单个帧上跟踪硬件吞吐量数据。 此数据是根据启动应用程序时定义的指标集收集的。 现在可以配置应用程序以收集“多通道指标”。 在此模式下,GPU 跟踪将在连续帧上自动收集更多计数器。 在收集结束时,您将能够查看作为单个分析会话呈现的所有此数据。
使用此模式时,要求跟踪的应用程序具有用户标记,因为 GPU 跟踪根据标记匹配帧。 也最好标记执行顺序保持一致。
此模式提供额外的计数器,可以解释“为什么”吞吐量低。
启用多通道指标
选中项目设置对话框中的“多通道指标”复选框

使用多通道指标进行跟踪
您可以像常规模式一样,使用目标应用程序触发热键或“收集 GPU 跟踪”按钮进行收集。 但是,您可能会注意到该过程需要更长的时间。 这是因为在此模式下收集了更多数据。
此模式依赖于跨帧的标记一致性。 如果 GPU 跟踪检测到此类不一致,则不一致的标记将被删除并显示警告消息

标记匹配算法
当前的标记匹配启发法具有以下目标
为完全匹配的标记生成有效的时间线映射
处理参数化标记名称(在一定程度上)
强调叶标记匹配(因为这些标记通常用于性能分析)
将不匹配的标记标记为不匹配,以便可以将它们作为不匹配显示给用户
当前的实现自下而上地处理标记层次结构(与之前的自上而下的方法相比),并且分两个阶段完成
叶标记匹配
父标记匹配
此外,如果每个通道跟踪多个帧,则用户可以选择(默认情况下为启用)使用“最佳帧匹配”(见下文)从每个通道中选择最佳匹配帧(见下文)。
标记名称比较
比较标记名称时,当前的启发法会修剪标记名称末尾的任何尾随数字/空格,然后执行字符串比较。 这成功地处理了 Unreal Engine 帧标记(“Frame N”),但在更复杂的情况下会失败。
叶标记匹配
对于每个队列,算法收集该队列的所有叶标记(没有子标记的标记)的列表,并为每个标记收集一个列表,k。
如果满足以下条件,则算法认为叶标记已匹配
它们具有相同的名称
它们具有相同数量的父标记
所有父标记名称都相同
父标记匹配
在叶标记匹配之后,算法尝试自下而上地匹配父标记。
如果满足以下条件,则父标记被视为已匹配
它们具有相同数量的子标记
所有子标记都匹配
最佳帧匹配
为了处理在多帧周期中交替工作负载的目标应用程序(例如,每 2 帧执行一次特定工作负载)并提高总体标记匹配机会,引入了最佳帧匹配逻辑。
当使用多通道指标跟踪每个通道的多个帧时,这会起作用,并导致用户拥有一个帧来查看,该帧表示最匹配的帧。
算法的运作方式如下
GPU 跟踪使用多通道指标收集每个通道 N>1 帧
在处理通道时,GPU 跟踪尝试将第一个通道中的每个帧与当前通道中的每个帧进行匹配,并根据匹配标记的总持续时间为每个帧到帧的匹配分配一个分数(每个通道最终得到 NxN 个分数)
选择接收总分最高的第一个通道中的帧,并通过将其与每个通道中与其最佳匹配的帧进行匹配来构建时间线映射
要激活“最佳帧匹配”,请转到工具->选项->GPU 跟踪->多通道指标
需要考虑的注意事项
注意
多通道指标模式会自动跟踪连续帧。 建议尽可能冻结游戏,或者在整个过程中不要移动场景。
查看多通道指标数据
注意
要使用多通道指标,目标应用程序应使用用户标记。
使用多通道指标收集的其他计数器在摘要和指标选项卡以及标记表中显示。
摘要选项卡

指标选项卡

分析具有多个窗口的应用程序
可以分析具有多个窗口的应用程序。 当 GPU 跟踪检测到附加的应用程序中有多个窗口时,它将自动显示一个下拉菜单,您可以在其中选择要分析的窗口。 这使您可以从编辑器中分析应用程序

在分析时检测干扰进程
GPU 跟踪收集 GPU 在一段时间内的性能跟踪,该时间段对应于目标应用程序活动(典型图形应用程序的整个帧)。 假设在此期间,GPU 性能数据仅表示代表目标应用程序完成的工作。 但是,由于 GPU 是共享设备,因此跟踪可能包含代表其他进程完成的工作负载,这可能会影响跟踪数据和后续性能分类。
可以采取一些步骤来最大程度地减少其他进程干扰跟踪的机会
在专用测试机上运行目标应用程序并执行远程跟踪
关闭所有其他可能干扰的应用程序(例如 Outlook)
以全屏模式运行应用程序
但是,即使采取了这些步骤,有时其他进程也可能会意外地执行 GPU 工作负载,例如 Windows 桌面窗口管理器 (DWM),并且检测这些工作负载并在跟踪中向用户指示这些工作负载是有价值的。
GPU 跟踪将尝试检测在分析时是否有另一个进程使用了 GPU。 如果检测到此类进程,则此区域将显示在时间线中。
您将能够看到进程名称以确保将其关闭,否则,您将无法依靠此范围的指标信息进行性能分析。
需要考虑的注意事项
注意
此功能目前仅限于 Windows 上的 DirectX 12,您必须确保启用“硬件加速 GPU 调度”才能使其正常工作。
GPU 崩溃转储
GPU 崩溃转储监视器
GPU 崩溃转储监视器设置
要配置 NVIDIA Nsight Aftermath 监视器设置,请左键单击 Microsoft Windows 系统通知区域(系统托盘)中的 NVIDIA Nsight Aftermath 监视器图标,或右键单击该图标并从弹出菜单中选择设置选项。
常规设置
常规设置页面允许配置 GPU 崩溃转储的存储目录、NVIDIA 着色器调试信息文件的存储目录,以及 NVIDIA Nsight Aftermath 监视器是否应提示在 Nsight Graphics 中打开新崩溃转储。

Aftermath 设置
Aftermath 设置页面允许您配置控制 Nsight Aftermath 图形驱动程序功能的各种选项,并允许您选择将捕获 GPU 崩溃转储的应用程序。
注意
在 Windows 上,修改 Aftermath 图形驱动程序设置需要 Windows 管理员权限。 因此,当修改和应用任何这些设置时,可能会弹出一个用户帐户控制确认窗口,询问是否允许修改系统设置。

支持的 Aftermath 模式如下
禁用 禁用所有 GPU 崩溃转储创建。
全局 为所有使用 D3D11/D3D12 或 Vulkan API 的应用程序启用崩溃转储创建。
白名单 允许您将 GPU 崩溃转储创建限制为白名单上的特定应用程序集。
生成着色器调试信息 启用为 Aftermath 崩溃转储创建启用的应用程序加载的所有着色器生成着色器调试信息(用于从传递给 NVIDIA 图形驱动程序的着色器 IL 映射到 GPU 执行的着色器微代码的行表)。
GPU 崩溃转储监视器会将调试信息存储到扩展名为 .nvdbg
的文件中,存储在常规设置选项卡中配置的调试信息转储目录中。
着色器调试信息是必需的,用于将活动或错误着色器线程束的着色器微代码指令映射到着色器 IL 或着色器源代码行。 着色器调试信息由嵌入到崩溃转储文件中的唯一着色器调试信息标识符标识。
另请参阅关于 源着色器调试信息 的部分,了解有关如何使用源级调试信息编译着色器源的详细信息。
注意
启用此设置会导致额外的编译开销,用于生成调试信息,以及额外的通用驱动程序开销,用于在着色器编译期间处理调试信息。
启用资源跟踪 启用驱动程序端对实时和最近销毁的资源(纹理、缓冲区等)的跟踪,这些资源用于增强崩溃转储中的 GPU 故障信息。
这允许 Aftermath 识别与 GPU 虚拟地址相关的资源,这些地址在由于 GPU 页面错误导致的崩溃情况下可见。 正在跟踪的资源信息包括有关资源大小、其格式以及资源对象的当前删除状态的详细信息。 D3D12 开发人员还可以考虑使用 GFSDK_Aftermath_DX12_RegisterResource
函数来检测其应用程序,以注册应用程序创建的 D3D12 资源。 这将允许 Aftermath 跟踪其他信息,例如应用程序设置的资源的调试名称。 对于 Vulkan 应用程序,通过 vkSetDebugUtilsObjectNameEXT
设置的资源的调试名称也将被捕获。 有关如何使用 Nsight Aftermath SDK 检测应用程序的更多详细信息,请参阅 Nsight Aftermath SDK 文档。
注意
启用此功能会导致额外的驱动程序开销,用于跟踪资源信息。
启用调用堆栈捕获 启用自动生成 Aftermath 事件标记,用于跟踪应用程序启动的所有绘制调用、计算和光线跟踪调度、光线跟踪加速结构构建操作或资源复制的来源。 此数据可以增强通过 Aftermath 用户标记收集的数据。
自动事件标记在命令流中紧跟在相应命令之后添加,并将记录命令的函数的 CPU 调用堆栈作为标记数据有效负载。
注意
启用此功能将导致相当大的驱动程序开销,以收集必要的信息。
注意
启用此功能后,GPU 崩溃转储文件可能包含崩溃应用程序的可执行文件的文件路径以及它已加载的所有 DLL 或 DSO 的文件路径。
启用其他着色器错误报告 使 GPU 进入一种特殊模式,该模式允许 GPU 报告其他运行时着色器错误。 这可以在调试 GPU 挂起、GPU 崩溃或与着色器执行相关的意外行为时提供其他信息。
启用此功能可能会导致其他崩溃转储报告着色器中表现出未定义行为或存在隐藏错误的问题,这些问题到目前为止一直未被注意到,因为默认情况下硬件会静默忽略它们。使用此选项启用的其他错误检查将导致以下情况的 GPU 异常
使用未对齐的地址访问内存,例如读取或写入不是访问大小倍数的字节地址。
访问超出范围的内存,例如读取或写入超出(组)共享或线程局部内存的声明边界,或从超出范围的常量缓冲区地址读取。
使用不兼容的格式或内存布局访问纹理。
达到调用堆栈限制。
注意
此功能仅在 NVIDIA 图形驱动程序 R515 或更高版本中受支持。
系统设置
系统设置页面包含系统范围的启用 SM 寄存器数据收集设置。 在 Linux 上,SM 寄存器的收集始终处于启用状态,因此监视器中不会显示系统设置页面。 在 Windows 上,SM 寄存器的收集在 R550 及更高版本的驱动程序上始终处于启用状态,因此用于 SM 寄存器收集的控件将被禁用并灰显。
注意
在 Windows 上,修改 Aftermath 系统设置需要 Windows 管理员权限。因此,当修改和应用任何这些设置时,可能会弹出一个用户帐户控制确认窗口,要求您提供修改系统设置的权限。

启用 SM 寄存器数据收集以在 SM 内部发生故障时收集 SM 寄存器值。这可以在调试与着色器执行相关的 GPU 崩溃时提供其他信息。
由于这是一个系统设置,因此修改它也可能会影响其他工具,例如 Nsight VSE CUDA 调试器,并可能导致意外行为! 在 Linux 上,此功能始终处于启用状态,与其他工具不兼容。
注意
此功能仅支持 NVIDIA 图形驱动程序 R535 或更高版本的 D3D12 和 Vulkan API,并且需要 Nsight Graphics Pro 才能可视化数据。 不支持内部着色器的寄存器检查。
命令行设置
所有 Aftermath GPU 崩溃转储监视器设置也可以通过命令行参数进行配置。
可用的命令行标志为
–help 打印帮助消息,其中包含可用选项的列表。
–version 打印可执行文件的发布版本。
–crashdump-dir arg 设置崩溃转储目录。
–debuginfo-dir arg 设置调试信息转储目录。
–prompt-on-crash 在生成崩溃后提示打开 Nsight Graphics。
–hostname arg 要在其上查找已运行的 Nsight Graphics 实例的计算机的主机名。
所有 Aftermath 设置 和 系统设置 也可以通过安装在崩溃转储监视器可执行文件旁边的单独命令行工具进行配置。 在 Windows 上,该命令行工具是 nv-aftermath-control.exe。 在 Linux 上,该工具名为 nv-aftermath-control.bin。
配置工具支持的命令行标志为
–mode arg 设置 Nsight Aftermath 模式。 arg 支持的选项为:Disabled、Whitelist 或 Global。
–whitelist arg 将应用程序添加到 Nsight Aftermath 白名单。 arg 必须采用以下形式
ApplicationName MyApp ExecutableName myApp.exe
可以重复此选项以将多个应用程序添加到白名单。 此选项还会清除先前设置的白名单。
–debuginfo 生成 NVIDIA 着色器调试信息。
–resource-tracking 启用资源跟踪。
–callstacks 启用自动标记生成,并进行调用堆栈捕获。
–shader-error-reporting 启用其他着色器错误报告。
–register-data-collection 启用 SM 寄存器数据收集。 仅限 Windows。
注意
在 Windows 上,修改 Aftermath 图形驱动程序设置需要 Windows 管理员权限。 因此,当执行 nv-aftermath-control.exe 时,可能会弹出一个用户帐户控制确认窗口,询问是否允许修改系统设置。
新崩溃转储通知对话框
如果 NVIDIA Nsight Aftermath 监视器配置为在新崩溃转储时提示,则每次将新的 GPU 崩溃转储文件存储到崩溃转储目录时,都会弹出一个通知对话框,指示有新的 GPU 崩溃转储可用。 此对话框显示为新崩溃转储生成的名称,还允许您直接在 Nsight Graphics 的新启动实例或已运行的 Nsight Graphics 实例中打开它。

新崩溃转储通知对话框
如果 NVIDIA Nsight Aftermath 监视器配置为在新崩溃转储时提示,则每次将新的 GPU 崩溃转储文件存储到崩溃转储目录时,都会弹出一个通知对话框,指示有新的 GPU 崩溃转储可用。 此对话框显示为新崩溃转储生成的名称,还允许您直接在 Nsight Graphics 的新启动实例或已运行的 Nsight Graphics 实例中打开它。

GPU 崩溃转储检查器
GPU 崩溃转储检查器窗口由两个主要视图组成
在窗口的左侧部分,有一组选项卡,提供有关打开的 GPU 崩溃转储文件的摘要信息,以及有关捕获的崩溃的信息。
在窗口的右侧部分,有一个多用途区域,根据在左侧选项卡的某些部分中所做的选择显示详细信息。

转储信息
转储信息选项卡提供有关打开的 GPU 崩溃转储文件和转储中包含的数据的摘要信息。 它由以下部分组成
转储详细信息部分总结了有关 GPU 崩溃转储文件的信息,例如文件名、转储的创建日期和时间以及文件大小。
应用程序部分总结了有关捕获 GPU 崩溃转储文件的应用程序的信息,例如可执行文件的名称、相应进程的进程标识符以及使用的图形 API。
异常摘要部分总结了有关 GPU 崩溃转储文件中捕获的 GPU 崩溃或 GPU 挂起原因的信息。 第一部分包含对转储中检测到的任何页面错误或着色器错误的分析。 这提供了这些问题的潜在原因,并包括指向任何可用资源信息、着色器位置和相关标记的链接。 将在未来的更新中添加对其他崩溃原因的分析。 第二部分显示了在设备恢复被触发 (TDR) 时,图形适配器和 D3D 或 Vulkan 设备处于什么状态。
系统信息部分总结了有关捕获 GPU 崩溃转储文件的系统的系统信息。 这包括有关操作系统、图形驱动程序以及发生崩溃的 GPU 的信息。
崩溃信息
崩溃信息选项卡提供有关在打开的 GPU 崩溃转储文件中捕获的数据的详细信息。 可用部分将根据崩溃类型以及崩溃转储中捕获的信息而有所不同。
活动线程束部分(如果可用)显示崩溃或挂起时所有活动的着色器执行。 每行显示特定着色器地址处执行的所有线程束的摘要,包括线程束的数量、着色器的类型、着色器哈希以及着色器中的相应位置(如果着色器调试信息可用)。 单击表中的一行将打开相应的着色器视图。
故障线程束部分(如果可用)显示所有遇到错误的着色器执行。 每行显示在特定着色器地址上命中的故障的摘要,包括错误类型、着色器的类型、着色器哈希以及源着色器中的相应位置(如果着色器调试信息可用)。 单击表中的一行将打开相应的着色器视图。
活动/故障线程束部分(如果可用)显示可展开的行,每行代表在特定着色器地址处执行的所有线程束的组。 如果任何线程束命中故障,则行标记为故障。 “活动线程束”列显示在“GPU PC 地址”列中的着色器地址处执行的线程束的数量。 可以展开行以显示有关各个线程束的详细信息。 每个条目都显示线程束的故障状态、线程束的唯一标识符、着色器的类型、着色器哈希以及着色器中的源或 IL 位置(如果着色器调试信息可用)。 单击表中的行或“故障”列中的地址链接将打开相应的着色器视图。 线程束信息根据选择填充,如果线程束发生故障,还会显示其他信息,例如故障名称、其描述以及线程束命中该故障的着色器地址。 单击“GPU PC 地址”或“着色器位置”链接将打开着色器视图。
页面错误部分(如果可用)显示有关导致崩溃的 GPU 页面错误的信息。 除了无法访问的页面的地址外,还有故障类型、访问类型以及访问页面的 GPU 单元。
页面错误资源历史记录部分(如果可用)显示有关在 GPU 页面错误地址处映射或已映射的资源的信息(如果启用了 Aftermath 资源跟踪功能)。
注意
完整资源历史记录功能仅在 R550 及更高版本的驱动程序上可用。并且它需要应用程序集成 Aftermath SDK 2024.1 或更高版本,以便正确跟踪调试名称和资源指针。否则,您可能只有一个第一个资源的调试名称,并且没有可用的资源指针。
资源详情视图显示详细信息,这些信息是关于通过在上面的 页错误资源历史记录 部分中单击资源条目而选择的资源。该视图显示资源的调试名称、资源的基础 GPU 虚拟地址、资源的大小等。
故障信息部分(如果可用)显示有关导致崩溃的错误的额外信息。对于某些其他错误类型,此部分会代替页错误部分显示。
GPU 状态部分显示 GPU 各个部分状态的高级摘要。这有助于追踪在发生崩溃时,图形管线的哪些部分处于活动状态或出现故障。
Aftermath 标记部分(如果可用)显示由 GPU 为每个已注册的 Aftermath 上下文最后处理的 Aftermath 事件标记的摘要。对于用户事件标记,单击表中的 Payload 链接将打开相应的 Aftermath 标记数据视图,该视图允许检查用户提供的标记负载。对于自动事件标记,单击 CallStack 链接将打开 Aftermath 调用堆栈视图,显示将相应的图形命令记录到 D3D 命令列表或 Vulkan 命令缓冲区的函数的调用堆栈。另请参阅
GFSDK_Aftermath.h
中的事件标记文档以及 Nsight Aftermath SDK 文档,以获取更多详细信息。
Shader View
着色器源代码视图显示与在 活动 Warp、故障 Warp 或活动/故障 Warp 视图中所做选择相关的着色器代码。这需要通过 配置 GPU 崩溃转储检查器 来提供适当的信息。
根据着色器可用的信息,语言选择框提供以下选项
如果选择 Source,则视图显示与在 活动 Warp、故障 Warp 或活动/故障 Warp 视图中选择的行相对应的高级着色器源代码。如果着色器是从多个源文件编译的,则 File 选择框允许在源文件之间切换。如果在活动 Warp 或活动/故障 Warp 视图中选择了一行,则当捕获崩溃转储数据时,由所选 Warp 执行的着色器源代码行会用黄色箭头标记。如果该 Warp 发生故障,则红色圆圈将标记故障的位置。如果在故障 Warp 视图中选择了一行,则与故障指令相对应的着色器源代码行会用红色圆圈标记。黄色箭头和红色圆圈按钮将直接跳转到相应的标记指令。
如果选择 IL,则视图显示与在 活动 Warp、故障 Warp 或活动/故障 Warp 视图中选择的行相对应的着色器的中间汇编代码(DXIL 或 SPIR-V)。如果在活动 Warp 或活动/故障 Warp 视图中选择了一行,则当捕获崩溃转储数据时,由所选 Warp 执行的中间语言语句会用黄色箭头标记。如果该 Warp 发生故障,则红色圆圈将标记故障的位置。如果在故障 Warp 视图中选择了一行,则与故障指令相对应的中间语言语句会用红色圆圈标记。黄色箭头和红色圆圈按钮将直接跳转到相应的标记指令。
Aftermath 标记数据视图
Aftermath 标记数据视图允许检查应用程序提供的 Aftermath 事件标记数据。由于 Aftermath 事件标记数据是无类型的,因此标记数据视图支持不同的 数据视图 模式来解释原始数据
As string 将事件标记数据解释为以零结尾的 UTF-8 字符串。
As wide string 将事件标记数据解释为以零结尾的宽字符字符串。
Custom 允许检查原始事件标记字节数据,或使用 结构化内存配置 提供数据的自定义解释。
Aftermath 标记调用堆栈视图
Aftermath 标记调用堆栈视图显示 GPU 处理的最后一次绘制、调度或复制调用的调用堆栈。将调用堆栈解析到源位置需要在 搜索路径设置 中正确设置符号搜索路径。或者,单击 Unknown Symbol 链接可以为特定的调用堆栈元素提供符号文件。

项目资源管理器
项目资源管理器提供当前项目关联的所有数据的视图。它将包含数据文件,按生成时间排序。请注意,您也可以包含指向其他文件的任意链接,作为关联数据的有用辅助手段。
可以通过右键单击并选择一个选项来与 项目资源管理器 中的项目进行交互来调整它们。也可以通过选择项目并按 F2 来重命名它们。
除了通过 项目资源管理器 导航外,您可能还希望查看最近生成的文件。通过 文件 > 最近的文件 或 文件 > 打开文件 加载这些文件。

选项
通过 工具 > 选项… 菜单访问的“选项”对话框,允许您以多种不同的方式配置 Nsight Graphics。每个部分在下面详细介绍。所选选项将持久保存在用户设置中,以便下次运行该工具时使用。
环境

在“环境”选项卡上,选择是使用浅色主题还是深色主题、字体选择、Nsight Graphics 要使用的默认文档文件夹以及您的首选启动行为。
GPU 跟踪

在“GPU 跟踪”选项卡上,您可以更改 GPU 跟踪报告中显示的时间单位和时间精度。您可以更改网格密度和 GPU 绑定阈值(这将影响摘要选项卡中的 GPU 绑定计算)。
着色器分析器

在“着色器分析器”选项卡上,您可以更改着色器字节码加载行为、非活动着色器显示模式和计数器显示模式。
当设置为
Yes
时,即使 PDB 文件与字节码不匹配,PDB 也会从 PDB 文件加载着色器调试信息。Inactive Shaders 控制是否为非活动着色器(PC 样本为 0 的着色器)加载着色器源代码、实时寄存器或记分板依赖项。设置为
No
以获得更好的打开着色器分析器报告的性能。Counter Attribute Mode 控制显示计数器的方式。
Value Mode:
Relative
模式以百分比形式显示计数器。Absolute
模式以绝对值形式显示计数器。Precision Mode:
Abbreviated
模式以人类可读的数字形式显示计数器。Full
模式显示原始计数器值。此选项仅在 Value Mode 设置为Absolute
时有效。
搜索路径
在“搜索路径”选项卡上,您可以为 NVIDIA Nsight Aftermath GPU 崩溃转储检查器、NVIDIA Nsight Graphics 帧调试器和其他工具使用的着色器和应用程序调试文件配置搜索路径设置。

Shader Source 指定可以找到着色器源文件的目录列表。此选项用于将应用程序中使用的高级着色器(HLSL、GLSL 等)源文件与着色器编译器嵌入到着色器对象中的文件名关联起来。在许多情况下,源代码已经嵌入到着色器二进制文件中,但在某些情况下,特别是如果使用的着色器编译工具链有自己的预处理步骤,则可能只有源文件信息可用。
Shader Binaries 指定可以找到预编译的二进制着色器对象(由 HLSL 编译器生成的 DirectX 着色器二进制文件、SPIR-V 着色器二进制文件等)的目录列表。例如,当打开 Nsight Aftermath GPU 崩溃转储时,会搜索这些路径以查找与 着色器哈希 匹配的着色器二进制文件,以访问 DXIL/SPIR-V 指令或检索源映射信息。
Separate Shader Debug Information 指定可以找到与着色器二进制文件分离的着色器调试信息文件的目录列表。这些是由编译器工具链在编译着色器二进制文件时可能生成的着色器调试信息文件(例如,由
dxc.exe
生成的.lld
或.pdb
文件)。NVIDIA Shader Debug Information 指定可以找到 NVIDIA 着色器调试信息文件的目录列表。这些是由 Nsight Aftermath GPU 崩溃转储监视器(
.nvdbg
文件)生成的着色器调试信息文件,或基于为使用 Nsight Aftermath SDK 的 GPU 崩溃转储收集功能进行检测的应用程序提供的着色器调试信息回调的数据创建的文件。着色器调试信息由嵌入到崩溃转储文件中的唯一 着色器调试信息标识符 标识。当需要将活动或故障着色器 Warp 的着色器微代码指令映射到着色器 IL 指令或着色器源代码行时,将使用着色器调试信息标识符在配置的搜索路径中搜索着色器调试信息文件。Application Debug Information 指定可以找到被分析的应用程序及其加载的动态库的调试信息(例如,PDB 文件或包含调试信息的共享对象文件)的目录列表。这对于解析多个视图中的应用程序调用堆栈是必要的。
对于上述所有路径,可以通过启用与每个路径关联的 搜索子目录 选项来递归搜索配置的目录。
注入

在“注入”选项卡上,选择是启用还是禁用调试 Steam 覆盖。
帧调试器(主机)

在“帧调试器”选项卡上,您可以配置主机显示的时间单位和精度设置、C++ 捕获的设置,并设置像素历史记录的超时时间。
反馈

在“反馈”选项卡上,选择您是否希望允许 Nsight Graphics 收集使用情况和平台数据。
通用视图功能
Nsight Graphics 支持在主窗口中停靠多个窗口。任何窗口都可以移动、调整、选项卡式或从其提供的停靠系统中拉出。大多数默认布局都已指定了多个文档,但如果您希望调整这些文档,您可以随时进行调整。
除了定位之外,在帧调试或分析时,还有一些按钮在多个帧调试器视图中是通用的。

Clone 按钮创建当前视图的副本,以便您可以比较当前操作的 API 检查器(或其他克隆视图)的不同部分。
Lock 按钮冻结当前视图,以便更改当前事件不会更新此视图。这在尝试比较两个不同操作上的相同状态时很有用。
窗口布局
Nsight Graphics 具有直观的窗口管理和停靠系统。窗口可以拖动并停靠在您喜欢的位置。
浮动窗口
窗口可以拖出 Nsight Graphics 主窗口,以便可以独立管理它们。然后,其他窗口可以停靠到该浮动窗口上。在支持它的操作系统(例如 Microsoft Windows)上,也可以从任务栏管理窗口。
固定窗口

选择图钉图标以将关联的窗口折叠到主窗口的侧面。

固定后,可以单击项目以打开窗口以供快速参考;单击窗口外部将折叠固定的窗口以查看其他内容。
用户命名布局
Nsight Graphics 允许用户自定义视图的大小和位置,以创建针对手头任务的布局。例如,如果您专注于调试 API 使用方面的问题,您可以将“事件”视图和 API 检查器并排放置,以便在您逐步浏览帧时,检查帧中不同点的 API 状态。当您退出帧重播时,视图位置会自动保存,并在捕获新帧时恢复。
但是,不同的问题类型可能需要独特的布局。为了方便从一个布局平滑过渡到另一个布局,您可以通过用户命名布局来保存和恢复以活动为中心的视图排列。
您可以从主菜单中的“窗口”下拉菜单访问此保存/加载功能。与布局相关的部分包括“保存窗口布局…”、“恢复窗口布局”、“管理窗口布局…”以及恢复“默认窗口布局”的条目。

“保存窗口布局…”将弹出一个对话框,允许您为当前布局指定名称。布局以命名的“.nvlayout”文件形式保存到文档目录中的“Layouts”文件夹中,并且可以与同事共享。

一旦您保存了一个(或两个)布局,您就可以使用“恢复窗口布局”菜单项来恢复它们。当您将鼠标悬停在它上面时,将弹出一个子菜单,其中包含所有已保存的布局。只需选择您想要的条目,视图将恢复到其原始位置。

有时您可能想要清理一些未使用的布局。当您选择“管理窗口布局”条目时,将弹出一个对话框,允许您删除或重命名旧布局等。

最后,此部分中的“重置窗口布局”条目允许您将布局恢复为当前活动的默认布局。
窗口选择器
Nsight Graphics 具有窗口选择器,用于快速枚举和选择打开的文档和窗口。要打开此对话框,请选择“窗口” > “窗口…”

激活后,将弹出一个窗口选择器,其中包含所有打开的文档和窗口。

使用鼠标或键盘导航以选择一个条目,然后按 Enter 键以激活所选窗口或文档。或者,您可以双击一个条目来激活它。
您还可以输入过滤器表达式以过滤到感兴趣的窗口。

BETA 着色器调试器
注意
着色器调试目前仅支持 Vulkan API。
查看着色器源代码
当您从 着色器视图 中选择蓝色链接时,着色器调试器将打开着色器源文件。

为了使着色器调试器能够访问您的着色器,您需要使用 -g 标志编译它们,这将确保原始源代码包含在 SPIR-V 文件中。某些应用程序将在其着色器中使用包含文件,以帮助维护性和代码重用。着色器调试器通过允许用户指定在调试着色器时要显示的文件来支持这一点。

“源”窗口顶部有一个组合框,其中包含着色器中各种文件的名称。选择后,窗口的内容将切换到该源代码。
添加断点
您可以从“着色器”视图和“源”窗口添加断点。在“着色器”视图中,您可以右键单击感兴趣的着色器并选择“设置断点”。这将在着色器的第一条指令上设置一个断点,当命中该断点时,源窗口将自动打开。

或者,您也可以直接在源窗口中设置断点。只需将光标移动到您想要设置断点的源代码行,然后按 F9,或单击行号右侧的区域以创建/删除任何断点。

条件断点
一旦您创建了一个无条件断点,您可以通过添加条件表达式来缩小断点的焦点。条件可以包括简单的标量表达式,类似于“监视”视图,包括作用域内的变量,以及上面表格中的内部函数(intrinsics),例如像素位置。例如,要为 x 和 y 都在 100-150 区域内的所有片段构造条件,您将使用
@pixel.x >= 100 && @pixel.x < 151 && @pixel.y >= 100 && @pixel.y < 151
禁用或删除断点
可以从“断点”窗口或“源”窗口中删除断点。
断点窗口
按 <Del> 键将删除当前突出显示行中的断点。
右键单击一行并选择“启用”将切换断点的当前启用状态,由复选标记指示。
右键单击一行并选择“删除”将删除相应的断点。
源窗口
左键单击断点标记或当光标位于带有断点的行上时按 F9 键将删除相应的断点。
右键单击断点标记将打开一个上下文菜单,允许删除或禁用断点。
使用焦点选择器
当 GPU 停止时(例如,当命中断点时),“焦点选择器”视图将显示有关 GPU 当前状态和当前活动工作负载的信息。这类似于 CPU 调试器的“线程”视图。它提供了一个摘要页面,总结了当前的 GPU 状态以及每种着色器类型的 GPU 工作负载有多少正在运行。“GPU 状态”的可能值是
Running - GPU 正在运行,积极执行图形工作负载。
Paused - GPU 已暂停,并且每个着色器类型的摘要页面处于活动状态,并显示当前正在运行的 GPU 工作负载。
Stalled - GPU 已暂停,最后一个焦点 Warp 可能在单步执行期间退出,或者它可能由于同一组中的其他 Warp 被冻结而正在等待屏障(请参阅 步进模式)。
点击“暂停”以返回到“暂停”模式,并选择一个新的焦点线程以检查或单步执行另一个 Warp。:w
或者,点击“恢复”以恢复 GPU 以命中另一个断点。

每个着色器类型的焦点选择器页面都显示该特定管线阶段的正在运行的工作负载列表。
最重要的是,“焦点选择器”视图允许您更改当前聚焦的工作负载,即光线、顶点、面片、图元、片段或计算线程,其他视图(如“寄存器”、“局部变量”、“监视”等)中显示的数据即为此工作负载的数据。此外,当前焦点选择决定了单步执行哪个工作负载着色器源代码。当前焦点工作负载用黄色箭头标记在每个着色器表格中的一行中指示。可以通过双击任何其他表格行来更改它。单击任何焦点选择器页面上的“显示焦点”按钮将打开该页面并滚动到具有当前焦点的行。

除了所有着色器阶段可用的表格视图外,“焦点选择器”视图还为顶点着色器阶段“顶点 (3D)”和片段着色器阶段“片段 (2D)”提供了两个图形视图。
“顶点 (3D)”页面显示顶点着色器阶段中当前活动的绘制调用的(预变换)顶点数据的点云表示。

当前活动的顶点着色器工作负载通过彩色点突出显示
带有蓝色光晕的红点对应于具有当前调试焦点的顶点着色器线程。
黄点对应于在断点处停止的顶点着色器线程。
蓝点对应于任何其他正在运行的顶点着色器线程。
可以使用鼠标和键盘操作 3D 视图
按住鼠标左键同时移动鼠标指针会旋转对象。
按住鼠标右键同时移动鼠标指针会移动/平移对象。
按住鼠标中键同时移动鼠标指针或使用鼠标滚轮会缩放视图。
在上述任何操作期间按住 Ctrl 键可以启用慢速交互模式以增强控制。与“顶点”表格视图类似,“顶点 (3D)”视图也允许通过单击任何突出显示的点来更改焦点线程。由于该视图一次只支持显示一个 3D 对象,因此有一些组合框允许您选择要显示哪个绘制调用的数据(如果多个绘制调用正在运行),以及要使用哪个顶点属性作为点的 3D 位置。“片段 (2D)”页面显示片段着色器工作负载当前正在运行的目标渲染目标的当前状态图像。请注意,这不是帧调试器中的最终渲染目标图像,而是实际的帧缓冲区内容。

当前活动的片段显示为颜色叠加层
红像素对应于具有当前调试焦点的片段着色器线程。
黄像素对应于在断点处停止的片段着色器线程。
蓝像素对应于任何其他正在运行的片段着色器线程。
可以使用鼠标滚轮放大和缩小,或更改叠加层的不透明度,以便更好地看到背景中的渲染目标图像。与“片段”表格视图类似,“片段 (2D)”视图也允许通过单击任何突出显示的像素来更改焦点线程。您可以使用图像视图下方的组合框选择要查看的渲染目标。
使用 Warp 信息视图
“Warp 信息”视图提供了查看 Warp 和线程运行情况的“SM 中心”视图的能力。每一行代表在 SM 上运行的单个 Warp,中间的彩色框是 Warp 内的线程。红框表示线程已命中断点。深红框表示线程已命中异常。绿框表示其他活动线程。浅绿框表示在屏障处等待的线程。浅灰框表示由于控制流发散而处于非活动状态的线程。最后,深灰框表示未使用的或已终止的线程。其他列显示有关 Warp 状态等的数据。将鼠标指针悬停在一行上将显示一个工具提示窗口,其中包含有关 Warp 的更多详细信息。同样,当将鼠标悬停在线程框上时,工具提示窗口将显示有关此特定线程的详细信息。
“Warp 信息”视图还允许更改当前调试焦点。双击一行会将调试焦点更改为该 Warp。双击一个线程框会将调试焦点更改为该特定线程。

步进、中断和恢复执行
除了断点之外,着色器调试器还允许单步执行着色器代码和其他控制着色器执行的方法,例如恢复所有活动的 GPU Warp 或中断执行。支持的命令是
暂停
恢复 (F5)
步入 (F11)
步过 (F10)
步出 (Shift-F11)
由于硬件组织结构,步进始终在 Warp 级别上进行。这意味着不是单独的 GPU 线程或工作负载,而是一组线程(最多 32 个)始终被步进。
着色器调试器 UI 不支持显式地按线程或按 Warp 控制在步进操作期间冻结哪些 Warp。相反,调试器支持多种步进模式,这些模式控制非焦点 Warp 在步进期间的行为。支持的模式是
模式 |
恢复 |
步入、步出、步过 |
---|---|---|
全部恢复 |
没有冻结任何内容 |
没有冻结任何内容 |
恢复组(如果不是计算着色器,则与恢复 Warp 相同) |
当前(计算)组之外的所有 Warp 都被冻结 |
当前(计算)组之外的所有 Warp 都被冻结 |
恢复 Warp |
除当前 Warp 之外的所有 Warp 都被冻结 |
除当前 Warp 之外的所有 Warp 都被冻结 |
步进组(如果不是计算着色器,则与步进 Warp 相同) |
没有冻结任何内容 |
当前(计算)组之外的所有 Warp 都被冻结 |
步进 Warp(默认) |
没有冻结任何内容 |
除当前 Warp 之外的所有 Warp 都被冻结 |
可以在着色器调试工具栏的“调度”下拉列表中选择当前活动模式。
使用局部变量和监视窗口
“局部变量”窗口列出当前作用域中定义的局部变量及其当前值。

“监视”窗口允许评估当前作用域及其父作用域中定义的着色器变量。这意味着,除了局部变量之外,还可以检查全局变量,例如 uniform 和 varying 变量。此外,还可以使用使用标量运算符的表达式,例如算术运算符、类型转换或结构组件和数组元素访问运算符。除了在调试着色器中定义的局部变量和全局变量之外,还可以在“监视”窗口或断点条件中使用许多内部变量。支持的内部变量因着色器类型而异
着色器类型 |
支持的内部变量 |
---|---|
顶点 |
@vertexId, @instanceId |
细分控制 |
@controlPointId, @primitiveId |
细分评估 |
@domainLocation, @primitiveId |
几何 |
@instanceId, @primitiveId |
片段 |
@pixel, @sampleId, @primitiveId, @rtArrayId |
计算 |
@groupThreadId, @groupId |

退出调试模式
要退出着色器调试,请删除您设置的任何断点并恢复 GPU。然后您可以像往常一样终止您的应用程序,或使用工具栏上的“终止”按钮。
故障排除
由于使任意应用程序分析成为可能的底层机制的复杂性,因此存在发生错误的可能性。Nsight Graphics 提供了大量方法,您可以在其中发现纠正可能遇到的问题的机会。
请参阅以下部分,了解通用工具以及常见问题及其可能解决方案的列表。此外,您可能需要查看 已知问题,以确定您是否遇到了已知问题。
通用工具
本节提供 Nsight Graphics 的故障排除技巧。
注意
重要提示:以下某些内容被视为仅限内部使用。其中一些选项特别敏感。在未首先验证该功能是否公开可用之前,请勿公开其可用性或建议客户使用它们,验证方法如下:
查看公共版本以查找显式选项,或者
向 NVIDIA Devtools 寻求确认。
输出消息
在工具的整个运行过程中,Nsight Graphics 提供消息,告知操作状态以及是否遇到任何问题。当尝试确定应用程序可能无法运行、连接或正确捕获的原因时,这可以提供一些帮助。错误消息在应用程序窗口的右下角用红色标志指示。可以双击此标志以打开 输出消息 窗口。或者,可以通过 工具 > 输出消息 访问此窗口。

崩溃报告
当应用程序崩溃或挂起时,崩溃报告可能是帮助解决问题的最有价值的信息之一。因此,如果您有能力发送崩溃报告,我们将不胜感激。
自动崩溃报告
Nsight Graphics(主机和目标)配置为在遇到崩溃时自动发送崩溃报告。通过对话框提交是一个好方法,但保存 minidump 以进行显式通信也可能很有用。
注意
如果您遇到崩溃并且没有发送崩溃报告的选项,您可能需要改为手动生成崩溃报告,如下所述。可能无法生成崩溃报告的一个典型原因是,应用程序配置了自己的自动崩溃报告,该报告覆盖了 Nsight Graphics 崩溃报告机制。
手动崩溃报告
如果您发现自动崩溃报告未触发,则手动崩溃报告是收集信息的有效方法。可以通过使用调试器附加到崩溃进程并在崩溃时手动创建转储来收集进程转储。
Windows
可以使用 Microsoft Visual Studio 创建崩溃转储。要完成此操作
启动 Visual Studio。
按照 使用调试器调试您的应用程序 的说明进行操作。
使用 Nsight Graphics 启动应用程序。
使用“调试 > 附加到进程”将 Visual Studio 调试器附加到它
当您遇到崩溃时,使用 Visual Studio “调试 > 另存为转储”菜单选项。
Linux
可以使用 GDB,GNU 调试器创建崩溃转储。要完成此操作
启动 gdb。
按照 使用调试器调试您的应用程序 的说明进行操作。
使用 Nsight Graphics 启动应用程序。
将 gdb 附加到它。
当您遇到崩溃时,请使用“generate-core-file”命令。
接下来,在进程仍然存活时,使用 core2md 实用程序将 core 文件转换为可以通过运行以下命令使用的 dump 文件:core2md <core dump> /proc/<crash process ID>/ <minidump>
core2md 实用程序可以在 Nsight Graphics 安装目录下的 host/linux-desktop-nomad-x64 中找到。
手动挂起报告
如果应用程序遇到挂起,进程 dump 文件可能是识别挂起源的最有效方法之一。可以通过使用调试器附加到挂起进程并按照以下说明手动创建 dump 文件来收集进程 dump 文件。
Windows
可以使用 Microsoft Visual Studio 创建崩溃转储。要完成此操作
启动 Visual Studio。
使用“Debug > Attach to Process”(调试 > 附加到进程)将 Visual Studio 调试器附加到挂起进程。
使用 Visual Studio “Debug > Break All”(调试 > 全部中断)命令停止程序执行。
使用 Visual Studio “Debug > Save Dump As”(调试 > 另存为 Dump)命令生成进程 dump 文件。
Linux
可以使用 GDB,GNU 调试器创建崩溃转储。要完成此操作
启动 gdb。
将 gdb 附加到您的进程。
进程在被 GDB 附加后应该已经停止,否则请按 Ctrl + C 发送 SIGINT 信号以停止进程。
使用“generate-core-file”命令生成进程 dump 文件。
接下来,在进程仍然存活时,使用 core2md 实用程序将 core 文件转换为可以通过运行以下命令使用的 dump 文件:core2md <core dump> /proc/<hang process ID>/ <minidump>
core2md 实用程序可以在 Nsight Graphics 安装目录下的 host/linux-desktop-nomad-x64 中找到。
使用调试器调试您的应用程序
尽管使用 Nsight Graphics 启动应用程序可能看起来是 CPU 调试的替代方案,但启动的应用程序仍然是一个可调试的应用程序。通过跟踪应用程序所采用的路径,这对于确定您遇到的问题是否在您自己的代码中非常有用。
为此,设置环境变量 NVIDIA_PROCESS_INJECTION_ATTACH_DIALOG=1
,并在看到消息框时附加调试器。设置断点后,单击“确定”以恢复您的应用程序,这些断点将允许您检查您的应用程序是否正在遵循预期的路径。
收集 DirectX 调试日志
有时,通过观察 DirectX 调试层的输出,可以缩小设备丢失或其他问题的范围。
如果您需要安装该层,它应该是 Windows 10 操作系统的一部分。
应用和功能 > 管理可选功能 > 图形工具
打开 dxcpl
,它应该看起来像下面这样。确保您安装的应用程序在 Scope List(作用域列表)中,并将 Direct3D/DXGI Debug Layer(Direct3D/DXGI 调试层)设置为 Force On(强制开启)。

有两种方法可以查看输出。
您可以在不附加 Visual Studio 的情况下查看日志,只需运行
DbgView.exe
。https://docs.microsoft.com/en-us/sysinternals/downloads/debugview。或者,使用 Visual Studio 附加。日志将显示在 Visual Studio 的 Output(输出)窗口中。
设置环境变量
有时,您可能会被要求设置一个未公开的变量,以帮助消除问题歧义。
在启动应用程序时,在连接对话框的 Environment(环境)设置中应用环境变量。
常见问题
问题:应用程序启动失败
您尝试启动您的应用程序,但它启动失败。
可能的原因
错误的命令行参数。
错误的工作目录。
您正在尝试在没有运行 Nsight Monitor 的远程计算机上启动。
可能的解决方案
确保您的命令行参数和工作目录符合预期。
如果您正在尝试在远程计算机上运行,请确保远程监视器正在运行并且计算机名称正确。请参阅 远程启动。
区分应用程序是否完全启动。按照 使用调试器调试您的应用程序 中的说明进行操作。检查您的应用程序是否完全启动,如果启动,它是否正在遵循其预期的路径。如果应用程序根本没有启动,请发送电子邮件至 devtools-support@nvidia.com。
问题:应用程序在运行时崩溃
您发现您的应用程序似乎已启动,但在运行时崩溃。
可能的原因
Nsight 缺少 API 支持
应用程序未检查设备/对象创建的返回代码,假设它已成功
拦截库崩溃
内部驱动程序崩溃
D3D 调试运行时交互
可能的解决方案
尝试禁用以下功能
对于 D3D 应用程序,尝试在禁用 D3D 调试运行时的情况下运行,因为调试运行时在行为上偶尔会与发布运行时有所不同。
如果以上方法均无效,请尝试尽可能收集崩溃 dump 文件并将其发送至 devtools-support@nvidia.com。
问题:应用程序在运行时挂起
您发现您的应用程序似乎已启动,但在运行时挂起。
可能的原因
多线程问题
HUD 问题
可能的解决方案
尝试禁用以下功能
如果以上方法均无效,请尝试尽可能收集进程 dump 文件并将其发送至 devtools-support@nvidia.com。
问题:应用程序在捕获期间崩溃
您发现您能够成功运行应用程序,但在尝试执行实时分析时,应用程序崩溃。
可能的原因
多线程问题
内存不足
应用程序由于 watchdog 超时而自行关闭
可能的解决方案
尝试禁用以下功能
如果您怀疑是多线程问题(D3D 运行时有时会指示这一点),请尝试禁用多线程捕获。
如果 Nsight Graphics 报告内存不足,请尝试降低应用程序的要求或尝试使用性能更强的 GPU 运行。
如果应用程序在没有任何明显崩溃迹象的情况下退出,则该应用程序可能正在自行关闭。请将您的问题联系 devtools-support@nvidia.com,我们将调查是否有机会停用线程。
问题:应用程序在捕获期间挂起
您发现您能够成功运行应用程序,但在尝试执行实时分析时,应用程序挂起。这种挂起有时在目标应用程序上显示为白屏。
可能的原因
应用程序正在延迟呈现帧,从而阻止进度
多线程问题
应用程序正在全屏模式下运行
可能的解决方案
如果应用程序正在延迟呈现帧,则可能会阻止捕获进度,因为 Nsight 在帧边界上执行工作。如果是这种情况,请尝试启用 强制重绘 功能,以强制应用程序呈现帧。
如果您怀疑是多线程问题,请尝试将以下功能更改为 RenderOnly
如果以上方法均无效,请尝试尽可能收集进程 dump 文件并将其发送至 devtools-support@nvidia.com。
问题:应用程序遇到不兼容性
当您运行的应用程序正在使用 Nsight 不支持的 API 方法或模式时,就会出现此问题。
可能的原因
使用了不支持的 API 方法
使用了不支持的 API 模式
可能的解决方案
当遇到此问题时,Nsight 将显示其遇到不兼容的 API 方法或原因列表。此列表与 Nsight 阻止捕获的原因的解释一起列出,其中包括应用程序崩溃、数据不正确等。由于 Nsight 是基于重放的调试器,因此缺少方法可能会在尝试重放时导致严重问题。但是,在某些情况下,缺少的方法是无害的,重放可能会在没有它们的情况下正确进行。通过主机捕获时,Nsight 将为用户提供一个机会,让他们在存在这些不兼容性的情况下进行捕获。从那时起,由用户来确定数据是否有意义。
当遇到不兼容性时,我们建议您将此不兼容性告知 devtools-support@nvidia.com,以便 Nsight 开发团队可以跟踪此问题并确定它是否是未来将要支持的功能。
请注意,如果您希望在每次运行时忽略所有不兼容性,并希望接受由此可能产生的错误,您可以设置“Troubleshooting > Ignore Incompatibilities”(故障排除 > 忽略不兼容性)选项来实现此目的。
问题:应用程序成功捕获,但在捕获一段时间后退出
此问题表明您已经取得了一定程度的成功,但即使应用程序通常处于非活动状态,应用程序也会崩溃。
可能的原因
服务主机查询导致崩溃
内存泄漏
Watchdog 计时器
可能的解决方案
当遇到此问题时,请注意您在遇到问题时正在做什么。首先要尝试的是什么都不做——应用程序在这样做时是否仍然崩溃?如果没有任何事情发生,那么这要么是内存泄漏,要么是 watchdog 计时器。
查看进程的内存使用情况——它是否在增长?这是内存泄漏,可能来自应用程序或工具。
设置秒表以计算崩溃所需的时间——它是否是像 30 或 60 秒这样的“整数”?这很可能是 watchdog 计时器。
如果这是内存泄漏(不常见但有可能),请联系支持部门以帮助确定问题。
如果这是 watchdog 问题,请在您的应用程序中禁用 watchdog。
问题:应用程序运行速度极慢
您已观察到应用程序的运行速率远低于正常运行速率。
可能的原因
正在完成过多的工作
应用程序可能正在执行不常见的路径
可能的解决方案
问题:D3D12 Replayer 显示的 CPU 开销超出预期
如果您在生成的 C++ 捕获中遇到更多开销,则保守同步可能是问题所在。
可能的原因
Nsight 的默认 fence 同步策略对于此应用程序可能过于保守
可能的解决方案
尝试试验重放 fence 行为。
问题:我无法捕获 Vulkan 应用程序
如果您发现“Capture for Live Analysis”(捕获以进行实时分析)按钮被禁用,或者您没有看到应用程序已启用 Nsight 分析的消息,则 Nsight Vulkan 层可能未启用。此症状通常伴随 Output Messages(输出消息)窗口中的错误,因此请在该窗口中查找错误以指示失败原因。
可能的原因
Nsight Vulkan 层配置已从您的系统配置中删除
可能的解决方案
一种解决方法是显式重新启用 Nsight Vulkan 层。为此,请按照适用于您系统的步骤操作
Windows
运行 <install directory>/host/windows-desktop-nomad-x64/VK_LAYER_NV_nomad.bat
Linux
检查 <install directory>/target/linux-desktop-nomad-x64/NomadVulkanLayer/vulkan/implicit_layer.d/ 下是否存在 vulkan 清单文件 (.json)
删除 ~/.local/share/vulkan/implicit_layer.d 中已卸载的 Nsight Graphics 的任何悬空清单
如果在执行上述步骤后仍然看到问题,则可能是 Nsight Graphics 错误,请向我们报告。同时,一种可能的解决方法是在“Start Activity”(启动活动)对话框中添加环境变量:XDG_DATA_DIRS=<install directory>/target/linux-desktop-nomad-x64/NomadVulkanLayer
如果在重复这些步骤后,您发现您的系统仍然无法捕获,请收集 Vulkan SDK 中 vulkaninfo
应用程序的输出日志,并将其发送至 devtools-support@nvidia.com。
问题:我无法附加到应用程序
应用程序启动,但您无法使用 Nsight Graphics 主机附加到它。
可能的原因
您在没有 Nsight Graphics 的情况下启动了进程层次结构的一部分。
您将连接设置为在根应用程序启动作为实际感兴趣进程的子进程时自动附加。
应用程序正在干扰 Nsight Graphics 的拦截,阻止其进行拦截。
应用程序正在使用软件渲染器。
可能的解决方案
Nsight Graphics 本质上是一个进程内调试器,因此它无法附加到最初不是通过 Nsight Graphics 启动的应用程序。附加功能旨在用于附加到通过其他方式(例如,命令行启动器)启动的应用程序,以及在主机出现问题时允许进行一些恢复,因为它允许您稍后附加。
确保终止与应用程序进程层次结构相关的任何进程,然后尝试再次启动它。
问题:主机 UI 崩溃
当您分析应用程序时,主机 UI 崩溃。
可能的原因
UI 错误
可能的解决方案
尝试减少运行时打开的视图数量,以查明哪个视图导致问题。
如果可能,尝试收集 UI 应用程序的崩溃 dump 文件,并将其发送至 devtools-support@nvidia.com。
尝试使用 Help > Reset Application Data(帮助 > 重置应用程序数据)删除 UI 持久性数据。
问题:目标窗口阻止主机窗口
在运行实时分析时,您发现目标窗口正在阻止主机窗口并干扰您希望在主机上执行的分析。这通常在无法访问多个显示器的机器上报告。
可能的原因
应用程序具有全屏设置
应用程序已设置 topmost 标志以使应用程序保持在顶部
可能的解决方案
我们建议在没有全屏或 topmost 设置的情况下运行。如果需要类似全屏的行为,许多应用程序都支持无边框窗口模式。
如果您必须分析具有这些特性的应用程序,并且您无法访问第二个显示器,则大多数现代操作系统 shell 上的虚拟桌面或工作区支持提供了一条有效的前进道路。为目标应用程序创建一个桌面,为主机创建一个桌面通常可以避免目标干扰。有关使用这些功能的更多信息,请参阅以下文章之一。
注意: 如果您希望禁止显示报告重放窗口干扰的对话框,请设置环境变量 NSIGHT_REPORT_REPLAY_WINDOW_INTERFERENCE=0
。
Linux/Gnome: https://help.gnome.org/users/gnome-help/stable/shell-workspaces.html.en
问题:报告强制失败的 QueryInterface
应用程序可能会尝试为 Nsight 不知道或不理解的类型执行 QueryInterface。为了避免由于这些未知类型导致的崩溃、渲染不正确或数据错误,Nsight 将报告强制失败的 QueryInterface 警告。报告此警告后,Nsight 将使此 QueryInterface 调用的结果无效,并返回 E_NOINTERFACE 以报告不支持此接口。
可能的原因
使用旧版本的 Nsight 对抗使用较新运行时功能的应用程序
一次使用多个工具拦截应用程序
Nsight 缺少 API 支持
可能的解决方案
当遇到此问题时,建议您首先尝试了解不兼容性的来源是什么。Nsight 将尝试打印 QueryInterface 调用中的源类型和目标类型。但是,当目标未知时,此类型将打印为 GUID。
在某些情况下,失败可能是明显的,您可能可以进行文本搜索以确定您的应用程序在何处进行此有问题的 QueryInterface 调用。如果很难找到,您也可以尝试使用调试器调试您的应用程序,并在运行应用程序之前在 MessageBoxA 上设置函数断点,这将报告 Nsight 执行报告的调用堆栈。
如果您无法解决此类型支持问题,您可以尝试设置环境变量以禁止此强制失败的查询。请注意,这不能保证解决所有问题,并且可能会导致未来未指定的故障,但它可以作为解决问题的可能性。环境变量 NSIGHT_PASSTHROUGH_UNKNOWN_GUIDS 是一个逗号分隔的 GUID 列表,允许在没有强制失败的情况下传递。GUID 必须使用大括号语法完全指定,如 NSIGHT_PASSTHROUGH_UNKNOWN_GUIDS={5b746c30-24e2-4385-81f6-39f7a068945b} 中所示。
如果您怀疑报告的类型应该受 Nsight 支持,请发送报告至 devtools-support@nvidia.com 寻求帮助。
附录
功能支持矩阵
功能 |
D3D11 |
D3D12 |
OpenGL |
Vulkan |
---|---|---|---|---|
帧捕获和实时分析 |
是 |
是 |
是 |
是 |
C++ 捕获 |
是 |
是 |
是 |
是 |
着色器分析 |
是 |
是 |
||
像素历史 |
是 |
是 |
是 |
是 |
动态着色器编辑 |
是 |
是 |
是 |
是 |
GPU 跟踪 |
是 |
是 |
是 |
|
光线追踪调试 |
是 |
是 |
||
Nsight Aftermath GPU 崩溃 Dump |
是 |
是 |
支持的 OpenGL 函数
Nsight Graphics 的帧调试器支持 OpenGL 操作集,这些操作由 OpenGL 4.5 核心配置文件定义。请注意,没有必要创建核心配置文件上下文来使用帧调试器。使用兼容性配置文件上下文但将自己限制为使用 OpenGL 4.5 核心子集的应用程序也将有效。还支持一些 OpenGL 4.5 兼容性配置文件功能,例如对 alpha 测试和默认顶点数组对象的支持。
帧调试器支持三类 OpenGL 扩展,如下所述。
1. OpenGL 核心上下文支持
下面列出的 OpenGL 扩展之所以受到支持,是因为该扩展已被 OpenGL 4.5 核心配置文件采用。例如,EXT_subtexture
包含在 OpenGL 1.1 中。glTexSubImage2DEXT
的调用受到支持,并且行为与 glTexSubImage2D
的调用相同。另一方面,虽然 EXT_vertex_array
也包含在 OpenGL 1.1 中,但帧调试器不支持 glColorPointerEXT
。glColorPointerEXT
的操作在包含在 OpenGL 1.1 中时被修改。此外,glColorPointer
是兼容性子集的一部分,但不是核心子集。
// GL 1.1
EXT_vertex_array
EXT_polygon_offset
EXT_blend_logic_op
EXT_texture
EXT_copy_texture
EXT_subtexture
EXT_texture_object
// GL 1.2
EXT_texture3D
EXT_bgra
EXT_packed_pixels
EXT_rescale_normal
EXT_separate_specular_color
SGIS_texture_edge_clamp
SGIS_texture_lod
EXT_draw_range_elements
EXT_color_table
EXT_color_subtable
EXT_convolutionHP_convolution_border_modes
SGI_color_matrix
EXT_histogram
EXT_blend_color
EXT_blend_minmax
EXT_blend_subtract
// GL 1.2.1
EXT_SGIS_multitexture
// GL 1.3
ARB_texture_compression
ARB_texture_cube_map
ARB_multisample
ARB_multitexture
ARB_texture_env_add
ARB_texture_env_combine
ARB_texture_env_dot3
ARB_texture_border_clamp
ARB_transpose_matrix
// GL 1.4
SGIS_generate_mipmap
NV_blend_square
ARB_depth_texture
ARB_shadow
EXT_fog_coord
EXT_multi_draw_arrays
ARB_point_arameters
EXT_secondary_color
EXT_blend_func_separate
EXT_stencil_wrap
EXT_texture_env_crossbar
EXT_texture_lod_bias
ARB_texture_mirrored_repeat
ARB_window_pos
// GL 1.5
ARB_vertex_buffer_object
ARB_occlusion_query
EXT_shadow_funcs
// GL 2.0
ARB_shader_objects
ARB_vertex_shader
ARB_fragment_shader
ARB_draw_buffers
ARB_texture_non_power_of_two
ARB_point_sprite
EXT_blend_equation_separate
ATI_separate_stencil
EXT_stencil_two_side
// GL 2.1
ARB_pixel_buffer_object
EXT_direct_state_access
EXT_texture_sRGB
// GL 3.0
EXT_gpu_shader4
NV_conditional_render
APPLE_flush_buffer_range
ARB_color_buffer_float
NV_depth_buffer_float
ARB_texture_float
EXT_packed_float
EXT_texture_shared_exponent
EXT_framebuffer_object
NV_half_float
ARB_half_float_pixel
EXT_framebuffer_multisample
EXT_framebuffer_blit
EXT_texture_integer
EXT_texture_array
EXT_packed_depth_stencil
EXT_draw_buffers2
EXT_texture_compression_rgtc
EXT_transform_feedback
APPLE_vertex_array_object
EXT_framebuffer_sRGB
// GL 3.1
EXT_draw_instanced
ARB_draw_instanced
ARB_copy_buffer
NV_primitive_restart
ARB_texture_buffer_object
ARB_texture_rectangle
ARB_uniform_buffer_object
// GL 3.2
ARB_vertex_array_bgra
ARB_draw_elements_base_vertex
ARB_fragment_coord_conventions
ARB_provoking_vertex
ARB_seamless_cube_map
ARB_texture_multisample
ARB_depth_clamp
ARB_geometry_shader_4
ARB_sync
// GL 3.3
ARB_shader_bit_encoding
ARB_blend_func_extended
ARB_explicit_attrib_location
ARB_occlusion_query2
ARB_sampler_objects
ARB_texture_rgb10_a2ui
ARB_texture_swizzle
ARB_timer_query
ARB_instanced_arrays
ARB_vertex_type_2_10_10_10_rev
// GL 4.0
ARB_texture_query_lod
ARB_draw_buffers_blend
ARB_draw_indirect
ARB_gpu_shader5
ARB_gpu_shader_fp64
ARB_sample_shading
ARB_shader_subroutine
ARB_tessellation_shader
ARB_texture_buffer_object_rgb32
ARB_texture_cube_map_array
ARB_texture_gather
ARB_transform_feedback2
ARB_transform_feedback3
// GL 4.1
ARB_ES2_compatibility
ARB_get_program_binary
ARB_separate_shader_objects
ARB_shader_precision
ARB_vertex_attrib_64bit
ARB_viewport_array
// GL 4.2
ARB_texture_compression_bptc
ARB_compressed_texture_pixel_storage
ARB_shader_atomic_counters
ARB_texture_storage
ARB_transform_feedback_instanced
ARB_base_instance
ARB_shader_image_load_store
ARB_conservative_depth
ARB_shading_language_420pack
ARB_internalformat_query
ARB_map_buffer_alignment
// GL 4.3
ARB_multi_draw_indirect
ARB_program_interface_query
ARB_shader_storage_buffer_object
ARB_copy_image
ARB_vertex_attrib_binding
ARB_texture_view
ARB_invalidate_subdata
ARB_framebuffer_no_attachments
ARB_stencil_texturing
ARB_explicit_uniform_location
ARB_texture_storage_multisample
ARB_program_interface_query
ARB_robust_buffer_access_behavior
ARB_ES3_compatibility
ARB_clear_buffer_object
ARB_internal_format_query2
ARB_texture_buffer_range
ARB_compute_shader
ARB_debug_group
ARB_debug_label
ARB_debug_output
// GL 4.4
ARB_query_buffer_object
ARB_enhanced_layouts
ARB_multi_bind
ARB_vertex_type_10f_11f_11f_rev
ARB_texture_mirror_clamp_to_edge
ARB_clear_texture
// GL 4.5
ARB_clip_control
ARB_cull_distance
ARB_conditional_render_inverted
GL_KHR_context_flush_control
ARB_get_texture_sub_image
GL_KHR_robustness
ARB_texture_barrier
ARB_ES3_1_compatibility
ARB_direct_state_access
ARB_shader_texture_image_samples
ARB_derivative_control
2. 其他支持的 OpenGL 扩展
第二类 OpenGL 扩展如下所示。这些扩展不是 OpenGL 4.5 核心或兼容性的一部分,但完全受帧调试器目标支持。由这些扩展添加的上下文和对象状态可能不会由主机 UI 显示。
ARB_framebuffer_object
EXT_texture_filter_anisotropic
NV_buffer_store
ARB_vertex_attrib_binding
ARB_multi_draw_indirect
NV_gpu_multicast
ARB_parallel_shader_compile
ARB_seamless_cubemap_per_texture
NV_shader_buffer_load
NV_vertex_buffer_unified_memory
3. 部分支持的 OpenGL 扩展
第三类 OpenGL 扩展是部分支持的扩展。这些扩展如下所示。
ARB_bindless_texture
WGL_ARB_extensions_string
WGL_ARB_pixel_format
WGL_EXT_extensions_string
WGL_EXT_swap_control
WGL_EXT_swap_control_tear
WGL_ARB_create_context
4. OpenGL 即时模式
除了核心功能和扩展之外,还支持选择即时模式功能。
glBegin
glEnd
glVertex*
glColor*
glIndex*
glNormal*
glTexCoord*
glDrawElement
glEnableClientState
glDisableClientState
glVertexPointer
glColorPointer
glSecondaryColorPointer
glIndexPointer
glNormalPointer
支持的 Vulkan 函数
Nsight Graphics™ 2025.1 帧调试支持 Vulkan 1.4.299 的所有功能。
此外,还支持以下 Vulkan 1.4.299 的扩展
VK_EXT_4444_formats
VK_EXT_acquire_xlib_display
VK_EXT_astc_decode_mode
VK_EXT_attachment_feedback_loop_dynamic_state
VK_EXT_attachment_feedback_loop_layout
VK_EXT_blend_operation_advanced
VK_EXT_border_color_swizzle
VK_EXT_buffer_device_address
VK_EXT_calibrated_timestamps
VK_EXT_color_write_enable
VK_EXT_conditional_rendering
VK_EXT_conservative_rasterization
VK_EXT_custom_border_color
VK_EXT_debug_marker
VK_EXT_debug_report
VK_EXT_debug_utils
VK_EXT_depth_bias_control
VK_EXT_depth_clamp_zero_one
VK_EXT_depth_clip_control
VK_EXT_depth_clip_enable
VK_EXT_depth_range_unrestricted
VK_EXT_descriptor_buffer
VK_EXT_descriptor_indexing
VK_EXT_device_address_binding_report
VK_EXT_device_fault
VK_EXT_device_memory_report
VK_EXT_direct_mode_display
VK_EXT_discard_rectangles
VK_EXT_display_surface_counter
VK_EXT_dynamic_rendering_unused_attachments
VK_EXT_extended_dynamic_state
VK_EXT_extended_dynamic_state2
VK_EXT_extended_dynamic_state3
VK_EXT_external_memory_host
VK_EXT_filter_cubic
VK_EXT_fragment_density_map
VK_EXT_fragment_shader_interlock
VK_EXT_full_screen_exclusive
VK_EXT_global_priority
VK_EXT_graphics_pipeline_library
VK_EXT_hdr_metadata
VK_EXT_headless_surface
VK_EXT_host_image_copy
VK_EXT_host_query_reset
VK_EXT_image_2d_view_of_3d
VK_EXT_image_compression_control
VK_EXT_image_compression_control_swapchain
VK_EXT_image_robustness
VK_EXT_image_sliced_view_of_3d
VK_EXT_image_view_min_lod
VK_EXT_index_type_uint8
VK_EXT_inline_uniform_block
VK_EXT_legacy_dithering
VK_EXT_legacy_vertex_attributes
VK_EXT_line_rasterization
VK_EXT_load_store_op_none
VK_EXT_map_memory_placed
VK_EXT_memory_budget
VK_EXT_memory_priority
VK_EXT_mesh_shader
VK_EXT_multi_draw
VK_EXT_multisampled_render_to_single_sampled
VK_EXT_mutable_descriptor_type
VK_EXT_nested_command_buffer
VK_EXT_non_seamless_cube_map
VK_EXT_opacity_micromap
VK_EXT_pageable_device_local_memory
VK_EXT_pci_bus_info
VK_EXT_physical_device_drm
VK_EXT_pipeline_creation_cache_control
VK_EXT_pipeline_creation_feedback
VK_EXT_pipeline_library_group_handles
VK_EXT_pipeline_protected_access
VK_EXT_pipeline_robustness
VK_EXT_post_depth_coverage
VK_EXT_present_mode_fifo_latest_ready
VK_EXT_primitive_topology_list_restart
VK_EXT_primitives_generated_query
VK_EXT_private_data
VK_EXT_provoking_vertex
VK_EXT_queue_family_foreign
VK_EXT_rasterization_order_attachment_access
VK_EXT_rgba10x6_formats
VK_EXT_robustness2
VK_EXT_sample_locations
VK_EXT_sampler_filter_minmax
VK_EXT_scalar_block_layout
VK_EXT_separate_stencil_usage
VK_EXT_shader_atomic_float
VK_EXT_shader_atomic_float2
VK_EXT_shader_demote_to_helper_invocation
VK_EXT_shader_image_atomic_int64
VK_EXT_shader_module_identifier
VK_EXT_shader_object
VK_EXT_shader_replicated_composites
VK_EXT_shader_stencil_export
VK_EXT_shader_subgroup_ballot
VK_EXT_shader_subgroup_vote
VK_EXT_shader_tile_image
VK_EXT_shader_viewport_index_layer
VK_EXT_subgroup_size_control
VK_EXT_subpass_merge_feedback
VK_EXT_surface_maintenance1
VK_EXT_swapchain_colorspace
VK_EXT_swapchain_maintenance1
VK_EXT_texel_buffer_alignment
VK_EXT_texture_compression_astc_hdr
VK_EXT_tooling_info
VK_EXT_transform_feedback
VK_EXT_validation_cache
VK_EXT_validation_features
VK_EXT_validation_flags
VK_EXT_vertex_attribute_divisor
VK_EXT_vertex_input_dynamic_state
VK_EXT_ycbcr_2plane_444_formats
VK_EXT_ycbcr_image_arrays
VK_KHR_16bit_storage
VK_KHR_8bit_storage
VK_KHR_acceleration_structure
VK_KHR_android_surface
VK_KHR_bind_memory2
VK_KHR_buffer_device_address
VK_KHR_calibrated_timestamps
VK_KHR_compute_shader_derivatives
VK_KHR_cooperative_matrix
VK_KHR_copy_commands2
VK_KHR_create_renderpass2
VK_KHR_dedicated_allocation
VK_KHR_deferred_host_operations
VK_KHR_depth_stencil_resolve
VK_KHR_descriptor_update_template
VK_KHR_device_group
VK_KHR_device_group_creation
VK_KHR_display
VK_KHR_display_swapchain
VK_KHR_draw_indirect_count
VK_KHR_driver_properties
VK_KHR_dynamic_rendering
VK_KHR_dynamic_rendering_local_read
VK_KHR_external_fence
VK_KHR_external_fence_capabilities
VK_KHR_external_fence_fd
VK_KHR_external_fence_win32
VK_KHR_external_memory
VK_KHR_external_memory_capabilities
VK_KHR_external_memory_fd
VK_KHR_external_memory_win32
VK_KHR_external_semaphore
VK_KHR_external_semaphore_capabilities
VK_KHR_external_semaphore_fd
VK_KHR_external_semaphore_win32
VK_KHR_format_feature_flags2
VK_KHR_fragment_shader_barycentric
VK_KHR_fragment_shading_rate
VK_KHR_get_display_properties2
VK_KHR_get_memory_requirements2
VK_KHR_get_physical_device_properties2
VK_KHR_get_surface_capabilities2
VK_KHR_global_priority
VK_KHR_image_format_list
VK_KHR_imageless_framebuffer
VK_KHR_incremental_present
VK_KHR_index_type_uint8
VK_KHR_line_rasterization
VK_KHR_load_store_op_none
VK_KHR_maintenance1
VK_KHR_maintenance2
VK_KHR_maintenance3
VK_KHR_maintenance4
VK_KHR_maintenance5
VK_KHR_maintenance6
VK_KHR_maintenance7
VK_KHR_map_memory2
VK_KHR_multiview
VK_KHR_pipeline_executable_properties
VK_KHR_pipeline_library
VK_KHR_portability_enumeration
VK_KHR_present_id
VK_KHR_present_wait
VK_KHR_push_descriptor
VK_KHR_ray_query
VK_KHR_ray_tracing_maintenance1
VK_KHR_ray_tracing_pipeline
VK_KHR_ray_tracing_position_fetch
VK_KHR_relaxed_block_layout
VK_KHR_sampler_mirror_clamp_to_edge
VK_KHR_sampler_ycbcr_conversion
VK_KHR_separate_depth_stencil_layouts
VK_KHR_shader_atomic_int64
VK_KHR_shader_clock
VK_KHR_shader_draw_parameters
VK_KHR_shader_expect_assume
VK_KHR_shader_float16_int8
VK_KHR_shader_float_controls
VK_KHR_shader_float_controls2
VK_KHR_shader_integer_dot_product
VK_KHR_shader_maximal_reconvergence
VK_KHR_shader_non_semantic_info
VK_KHR_shader_quad_control
VK_KHR_shader_relaxed_extended_instruction
VK_KHR_shader_subgroup_extended_types
VK_KHR_shader_subgroup_rotate
VK_KHR_shader_subgroup_uniform_control_flow
VK_KHR_shader_terminate_invocation
VK_KHR_shared_presentable_image
VK_KHR_spirv_1_4
VK_KHR_storage_buffer_storage_class
VK_KHR_surface
VK_KHR_surface_protected_capabilities
VK_KHR_swapchain
VK_KHR_swapchain_mutable_format
VK_KHR_synchronization2
VK_KHR_timeline_semaphore
VK_KHR_uniform_buffer_standard_layout
VK_KHR_variable_pointers
VK_KHR_vertex_attribute_divisor
VK_KHR_video_decode_av1
VK_KHR_video_decode_h264
VK_KHR_video_decode_h265
VK_KHR_video_decode_queue
VK_KHR_video_encode_h264
VK_KHR_video_encode_h265
VK_KHR_video_encode_queue
VK_KHR_video_maintenance1
VK_KHR_video_queue
VK_KHR_vulkan_memory_model
VK_KHR_wayland_surface
VK_KHR_win32_keyed_mutex
VK_KHR_win32_surface
VK_KHR_workgroup_memory_explicit_layout
VK_KHR_xcb_surface
VK_KHR_xlib_surface
VK_KHR_zero_initialize_workgroup_memory
VK_NVX_binary_import
VK_NVX_image_view_handle
VK_NVX_multiview_per_view_attributes
VK_NV_acquire_winrt_display
VK_NV_clip_space_w_scaling
VK_NV_compute_shader_derivatives
VK_NV_cooperative_matrix
VK_NV_copy_memory_indirect
VK_NV_corner_sampled_image
VK_NV_coverage_reduction_mode
VK_NV_dedicated_allocation
VK_NV_dedicated_allocation_image_aliasing
VK_NV_descriptor_pool_overallocation
VK_NV_device_diagnostic_checkpoints
VK_NV_device_diagnostics_config
VK_NV_device_generated_commands
VK_NV_device_generated_commands_compute
VK_NV_extended_sparse_address_space
VK_NV_external_memory
VK_NV_external_memory_capabilities
VK_NV_external_memory_win32
VK_NV_fill_rectangle
VK_NV_fragment_coverage_to_color
VK_NV_fragment_shader_barycentric
VK_NV_fragment_shading_rate_enums
VK_NV_framebuffer_mixed_samples
VK_NV_geometry_shader_passthrough
VK_NV_glsl_shader
VK_NV_inherited_viewport_scissor
VK_NV_linear_color_attachment
VK_NV_low_latency
VK_NV_low_latency2
VK_NV_memory_decompression
VK_NV_mesh_shader
VK_NV_optical_flow
VK_NV_present_barrier
VK_NV_raw_access_chains
VK_NV_ray_tracing
VK_NV_ray_tracing_invocation_reorder
VK_NV_ray_tracing_linear_swept_spheres
VK_NV_ray_tracing_motion_blur
VK_NV_ray_tracing_validation
VK_NV_representative_fragment_test
VK_NV_sample_mask_override_coverage
VK_NV_scissor_exclusive
VK_NV_shader_atomic_float16_vector
VK_NV_shader_image_footprint
VK_NV_shader_sm_builtins
VK_NV_shader_subgroup_partitioned
VK_NV_shading_rate_image
VK_NV_viewport_array2
VK_NV_viewport_swizzle
目前不支持以下 Vulkan 1.4.299 的扩展。如果您的应用程序使用这些扩展,请发送反馈功能请求,让 Nsight 团队了解您的兴趣和需求。
VK_EXT_acquire_drm_display
VK_EXT_application_parameters
VK_EXT_depth_clamp_control
VK_EXT_device_generated_commands
VK_EXT_directfb_surface
VK_EXT_display_control
VK_EXT_external_memory_acquire_unmodified
VK_EXT_external_memory_dma_buf
VK_EXT_fragment_density_map2
VK_EXT_frame_boundary
VK_EXT_global_priority_query
VK_EXT_image_drm_format_modifier
VK_EXT_layer_settings
VK_EXT_metal_objects
VK_EXT_metal_surface
VK_EXT_pipeline_properties
VK_KHR_object_refresh
VK_KHR_performance_query
VK_KHR_pipeline_binary
VK_KHR_portability_subset
VK_NV_command_buffer_inheritance
VK_NV_cuda_kernel_launch
VK_NV_displacement_micromap
VK_NV_external_memory_rdma
VK_NV_external_memory_sci_buf
VK_NV_external_sci_sync
VK_NV_external_sci_sync2
VK_NV_per_stage_descriptor_set
VK_NV_private_vendor_info
VK_NV_win32_keyed_mutex
支持的 NVAPI 函数
Nsight Graphics 的帧调试器支持大量的 NVAPI 函数。函数列表如下
NvAPI_GetErrorMessage
NvAPI_GetInterfaceVersionString
NvAPI_D3D11_AliasMSAATexture2DAsNonMSAA
NvAPI_D3D11_BeginUAVOverlap
NvAPI_D3D11_BeginUAVOverlapEx
NvAPI_D3D11_CreateCubinComputeShader
NvAPI_D3D11_CreateCubinComputeShaderWithName
NvAPI_D3D11_CreateDevice
NvAPI_D3D11_CreateDeviceAndSwapChain
NvAPI_D3D11_CreateDomainShaderEx
NvAPI_D3D11_CreateFastGeometryShader
NvAPI_D3D11_CreateFastGeometryShaderExplicit
NvAPI_D3D11_CreateGeometryShaderEx_2
NvAPI_D3D11_CreateHullShaderEx
NvAPI_D3D11_CreateMetaCommand
NvAPI_D3D11_CreatePixelShaderEx_2
NvAPI_D3D11_CreateRasterizerState
NvAPI_D3D11_CreateSamplerState
NvAPI_D3D11_CreateShadingRateResourceView
NvAPI_D3D11_CreateVertexShaderEx
NvAPI_D3D11_DecompressView
NvAPI_D3D11_EndUAVOverlap
NvAPI_D3D11_EnumerateMetaCommands
NvAPI_D3D11_ExecuteMetaCommand
NvAPI_D3D11_GetResourceHandle
NvAPI_D3D11_InitializeMetaCommand
NvAPI_D3D11_IsFatbinPTXSupported
NvAPI_D3D11_IsNvShaderExtnOpCodeSupported
NvAPI_D3D11_MultiDrawIndexedInstancedIndirect
NvAPI_D3D11_MultiDrawInstancedIndirect
NvAPI_D3D11_MultiGPU_GetCaps
NvAPI_D3D11_MultiGPU_Init
NvAPI_D3D11_RSGetPixelShadingRateSampleOrder
NvAPI_D3D11_RSSetExclusiveScissorRects
NvAPI_D3D11_RSSetPixelShadingRateSampleOrder
NvAPI_D3D11_RSSetShadingRateResourceView
NvAPI_D3D11_RSSetViewportsPixelShadingRates
NvAPI_D3D11_SetDepthBoundsTest
NvAPI_D3D11_SetNvShaderExtnSlot
NvAPI_D3D11_SetNvShaderExtnSlotLocalThread
NvAPI_D3D12_BuildRaytracingAccelerationStructureEx
NvAPI_D3D12_BuildRaytracingOpacityMicromapArray
NvAPI_D3D12_CopyTileMappings
NvAPI_D3D12_CreateCommittedResource
NvAPI_D3D12_CreateComputePipelineState
NvAPI_D3D12_CreateCubinComputeShader
NvAPI_D3D12_CreateCubinComputeShaderWithName
NvAPI_D3D12_CreateDDisplayPresentBarrierClient
NvAPI_D3D12_CreateGraphicsPipelineState
NvAPI_D3D12_CreateHeap
NvAPI_D3D12_CreateHeap2
NvAPI_D3D12_CreateMetaCommand
NvAPI_D3D12_CreatePresentBarrierClient
NvAPI_D3D12_CreateReservedResource
NvAPI_D3D12_EmitRaytracingOpacityMicromapArrayPostbuildInfo
NvAPI_D3D12_EnumerateMetaCommands
NvAPI_D3D12_ExecuteMetaCommand
NvAPI_D3D12_GetGraphicsCapabilities
NvAPI_D3D12_GetNeedsAppFPBlendClamping
NvAPI_D3D12_GetRaytracingCaps
NvAPI_D3D12_InitializeMetaCommand
NvAPI_D3D12_IsFatbinPTXSupported
NvAPI_D3D12_IsNvShaderExtnOpCodeSupported
NvAPI_D3D12_NotifyOutOfBandCommandQueue
NvAPI_D3D12_QueryCpuVisibleVidmem
NvAPI_D3D12_QueryModifiedWSupport
NvAPI_D3D12_QueryPresentBarrierSupport
NvAPI_D3D12_QuerySinglePassStereoSupport
NvAPI_D3D12_RegisterPresentBarrierResources
NvAPI_D3D12_ReservedResourceGetDesc
NvAPI_D3D12_ResourceAliasingBarrier
NvAPI_D3D12_SetAsyncFrameMarker
NvAPI_D3D12_SetCreatePipelineStateOptions
NvAPI_D3D12_SetDepthBoundsTestValues
NvAPI_D3D12_SetModifiedWMode
NvAPI_D3D12_SetNvShaderExtnSlotSpace
NvAPI_D3D12_SetNvShaderExtnSlotSpaceLocalThread
NvAPI_D3D12_SetSinglePassStereoMode
NvAPI_D3D12_UpdateTileMappings
NvAPI_D3D1x_BindSwapBarrier
NvAPI_D3D1x_DisableShaderDiskCache
NvAPI_D3D1x_GetGraphicsCapabilities
NvAPI_D3D1x_JoinSwapGroup
NvAPI_D3D1x_Present
NvAPI_D3D1x_QueryFrameCount
NvAPI_D3D1x_QueryMaxSwapGroup
NvAPI_D3D1x_QuerySwapGroup
NvAPI_D3D1x_ResetFrameCount
NvAPI_D3D_BeginResourceRendering
NvAPI_D3D_ConfigureAnsel
NvAPI_D3D_EndResourceRendering
NvAPI_D3D_GetCurrentSLIState
NvAPI_D3D_GetLatency
NvAPI_D3D_GetObjectHandleForResource
NvAPI_D3D_GetSleepStatus
NvAPI_D3D_ImplicitSLIControl
NvAPI_D3D_InitializeSMPAssist
NvAPI_D3D_IsGSyncActive
NvAPI_D3D_IsGSyncCapable
NvAPI_D3D_QueryModifiedWSupport
NvAPI_D3D_QueryMultiViewSupport
NvAPI_D3D_QuerySMPAssistSupport
NvAPI_D3D_QuerySinglePassStereoSupport
NvAPI_D3D_RegisterDevice
NvAPI_D3D_SetFPSIndicatorState
NvAPI_D3D_SetLatencyMarker
NvAPI_D3D_SetModifiedWMode
NvAPI_D3D_SetMultiViewMode
NvAPI_D3D_SetReflexSync
NvAPI_D3D_SetResourceHint
NvAPI_D3D_SetSinglePassStereoMode
NvAPI_D3D_SetSleepMode
NvAPI_D3D_SetVerticalSyncMode
NvAPI_D3D_Sleep
NvAPI_DestroyPresentBarrierClient
NvAPI_JoinPresentBarrier
NvAPI_LeavePresentBarrier
NvAPI_QueryPresentBarrierFrameStatistics
NvAPI_DISP_AcquireDedicatedDisplay
NvAPI_DISP_GetNvManagedDedicatedDisplays
NvAPI_DISP_ReleaseDedicatedDisplay
NvAPI_OGL_ExpertModeDefaultsGet
NvAPI_OGL_ExpertModeDefaultsSet
NvAPI_OGL_ExpertModeGet
NvAPI_OGL_ExpertModeSet
不支持的捕获
Nsight Graphics 维护应用程序使用的不支持的函数或操作列表。如果遇到不支持的操作,将报告不支持的捕获。这种不支持的捕获可以防止因已知限制而导致的崩溃或不正确的结果。
但是,在某些情况下,这些不支持的操作可能不会影响随后的任何分析。因此,在警告不支持的捕获的风险后,Nsight Graphics 将提供一个机会,让用户尽管存在此警告仍继续进行。如果用户继续,Nsight Graphics 将尽最大努力继续进行捕获。
如果您确定此不支持的操作是无害的,并且您希望完全关闭它,您可以通过 Ignore Incompatibilities(忽略不兼容性)选项来禁止此警告。请注意,这将阻止您收到有关未来不兼容性的通知,因此请谨慎使用。
更新通知
Nsight Graphics 可以检查新版本并通知用户任何更新。有 2 个选项可用于控制此功能,可在 Tools > Options(工具 > 选项)视图的 Environment(环境)选项卡中找到。

默认情况下,Nsight Graphics 每次启动应用程序时都会检查更新。可以通过为“Check for updates at startup”(启动时检查更新)选项选择“No”(否)来更改此设置。禁用此选项后,Nsight Graphics 仍将每 3 天检查一次更新。
可以通过将“Show version update notifications”(显示版本更新通知)值设置为“No”(否)来完全禁用更新通知。
如果禁用了自动检查功能,用户仍然可以通过选择 Help > Check for updates…(帮助 > 检查更新…)菜单选项来检查更新。
Microsoft Visual Studio 集成
NVIDIA Nsight 集成是一个 Visual Studio 扩展,允许您从 Visual Studio 内部访问 Nsight Graphics 的强大功能。
当 Nsight Graphics 与 NVIDIA Nsight 集成一起安装时,Nsight Graphics 活动将显示在 Visual Studio 菜单栏的 Nsight 菜单下。这些活动使用当前项目设置和可执行文件启动 Nsight Graphics,允许您重用所有设置,而无需手动复制任何设置。您甚至可以设置快捷键,以使用指定的 Nsight Graphics 活动启动会话。当您使用多个 Nsight 工具(例如 Nsight Systems 或 Nsight Compute)时,您将看到每个工具的独立命令,从而大大简化您的工作流程。
有关从 Visual Studio 内部使用 Nsight Graphics 的更多信息,请访问