4. Nsight Compute CLI

Nsight Compute CLI 的用户指南。

4.1. 简介

NVIDIA Nsight Compute CLI (ncu) 提供了一种非交互式方法,用于从命令行分析应用程序的性能。它可以直接在命令行上打印结果,或者将结果存储在报告文件中。它还可以用于简单地启动目标应用程序(详见 常规 部分),然后在之后附加 NVIDIA Nsight Compute 或另一个 ncu 实例。

对于从 nvprof 迁移到 NVIDIA Nsight Compute 的用户,请另行参阅 Nvprof 迁移指南,以比较功能和工作流程。

4.2. 快速入门

  1. 使用命令行性能分析器启动目标应用程序

    命令行性能分析器启动目标应用程序,检测目标 API,并为指定的内核收集性能分析结果。CLI 可执行文件名为 ncu。此名称的快捷方式位于 NVIDIA Nsight Compute 安装的基本目录中。实际可执行文件位于 Windows 上的 target\windows-desktop-win7-x64 文件夹或 Linux 上的 target/linux-desktop-glibc_2_11_3-x64 文件夹中。默认情况下,NVIDIA Nsight Compute 安装在 Linux 上的 /usr/local/cuda-<cuda-version>/NsightCompute-<version> 和 Windows 上的 C:\Program Files\NVIDIA Corporation\Nsight Compute <version> 中。

    要为目标应用程序中所有内核启动收集 basic 集,请启动

    $ ncu -o profile CuVectorAddMulti.exe
    

    应用程序在检测模式下运行,并且对于每次内核启动,都会创建一个性能分析结果。默认情况下,结果会写入 profile.nsight-cuprof。来自计算性能分析器的每个输出都以 ==PROF== 开头。其他行是来自应用程序本身的输出。对于每个已分析的内核,都会显示内核函数的名称和数据收集的进度。要收集所有请求的性能分析信息,可能需要多次重放内核。在性能分析完成后,会显示每个内核的总重放次数。

    [Vector addition of 1144477 elements]
    ==PROF== Connected to process 5268
    Copy input data from the host memory to the CUDA device
    CUDA kernel launch A with 4471 blocks of 256 threads
    ==PROF== Profiling "vectorAdd_A" - 0: 0%....50%....100% - 46 passes
    CUDA kernel launch B with 4471 blocks of 256 threads
    ==PROF== Profiling "vectorAdd_B" - 1: 0%....50%....100% - 46 passes
    Copy output data from the CUDA device to the host memory
    Done
    ==PROF== Disconnected from process 5268
    ==PROF== Report: profile.ncu-rep
    
  2. 自定义数据收集

    可以使用选项来指定应为哪些内核收集数据。-c 限制了收集的内核启动次数。-s 在数据收集开始之前跳过给定数量的内核。-k 允许您通过正则表达式匹配内核名称来筛选内核。--kernel-id 允许您按上下文、流、名称和调用筛选内核,类似于 nvprof。

    要限制为每次内核启动应收集的内容,请使用 --section 按标识符指定确切的 *.section(文件)。每个 section 文件定义了一组要收集的指标,这些指标在逻辑上分组,以解决特定的性能问题。默认情况下,会收集与 basic 集关联的 section。使用 --list-sets 查看当前可用集的列表。使用 --list-sections 查看当前可用 section 的列表。预定义 section 文件的默认搜索目录和位置也称为 sections/。有关更多详细信息,请参阅性能分析指南

    或者,您可以使用 --metrics 收集一组单独的指标。可以使用 --query-metrics 查询可用的指标。有关指标的命名约定和结构的说明,请参阅指标结构

    NVIDIA Nsight Compute 中的大多数指标都使用基本名称和各种后缀命名,例如 sm__throughput.avg.pct_of_peak_sustained_elapsed。基本名称是 sm__throughput,后缀是 avg.pct_of_peak_sustained_elapsed。这是因为大多数指标都遵循相同的结构并具有相同的后缀集。在选择用于性能分析的指标时,您需要将基本名称或完整名称传递给 NVIDIA Nsight Compute。使用 --query-metrics-mode suffix --metrics <metrics list> 查看所选指标的完整名称。

    某些其他指标不遵循这种结构化的命名方式。它们记录在指标参考中。

  3. 更改命令行输出

    默认情况下,临时文件用于存储性能分析结果,数据会打印到命令行。要永久存储性能分析器报告,请使用 -o 指定输出文件名。

    除了将结果存储在报告文件中,命令行性能分析器还可以使用不同的页面打印结果。这些页面对应于 UI 报告中的相应页面。默认情况下,如果没有指定显式输出文件,则会打印详细信息页面。要选择其他页面或除了存储在显式文件中之外还进行打印,请使用 --page=<Page> 命令。目前,支持以下页面:details, raw, source

    使用 --csv 使任何输出都以逗号分隔,以便于进一步处理。有关更多选项(例如摘要视图),请参阅控制台输出

  4. 在 UI 中打开报告

    UI 可执行文件名为 ncu-ui。此名称的快捷方式位于 NVIDIA Nsight Compute 安装的基本目录中。实际可执行文件位于 Windows 上的 host\windows-desktop-win7-x64 文件夹或 Linux 上的 host/linux-desktop-glibc_2_11_3-x64 文件夹中。在 UI 窗口中,关闭启动活动对话框,然后通过文件 > 打开打开报告文件,方法是将报告文件拖到 NVIDIA Nsight Compute 中。

    您还可以将报告文件指定为可执行文件的命令行参数,即 ncu-ui <MyReport.ncu-rep>。或者,当在具有主机平台支持的平台上使用 NVIDIA Nsight Compute CLI 时,可以直接将 --open-in-ui 与 ncu 一起使用,以在用户界面中打开收集的报告。

    报告在新文档窗口中打开。有关报告的更多信息,请参阅性能分析器报告,了解如何通过 NVIDIA Nsight Compute 收集性能分析信息。

4.3. 用法

4.3.1. 模式

模式会更改命令行性能分析器的基本行为。根据选择的模式,可以使用不同的命令行选项。例如,如果选择了附加模式,则启动无效。

  • 启动并附加: 目标应用程序在本地系统上使用该工具的注入库启动。根据选择的性能分析选项,将对应用程序中选定的内核进行性能分析,并将结果打印到控制台或存储在报告文件中。一旦目标应用程序完成或崩溃,并且一旦所有结果都已处理,该工具就会退出。

    这是默认模式,也是唯一支持在选定平台上分析子进程的模式。

  • 启动: 目标应用程序在本地系统上使用该工具的注入库启动。一旦达到第一个拦截的 API 调用(通常是 cuInit()),所有应用程序线程都会被挂起。现在,应用程序希望工具附加以进行性能分析。您可以使用 NVIDIA Nsight Compute 或使用命令行性能分析器的附加模式进行附加。

  • 附加: 该工具尝试连接到先前使用 NVIDIA Nsight Compute 或使用命令行性能分析器的启动模式启动的目标应用程序。该工具可以附加到本地系统上的目标,也可以使用远程连接。

4.3.2. 多进程支持

NVIDIA Nsight Compute CLI 支持在以下平台上分析多进程应用程序:x86_64 Windows、x86_64 Linux、DRIVE OS Linux、DRIVE OS QNX、PowerPC。有关如何启用此功能,请参阅启动选项。

在 x86_64 Windows 上,NVIDIA Nsight Compute CLI 默认支持分析从 32 位应用程序启动的 64 位进程。在 x86_64 Linux 上,从 32 位应用程序启动需要启用 support-32bit 选项,并且必须在您的系统上安装所需的 32 位库。在 DRIVE OS Linux、DRIVE OS QNX 和 PowerPC 上,不支持跟踪 32 位应用程序。在任何平台上都不支持分析 32 位进程。

分析 MPI 应用程序是多进程性能分析的一种特殊情况。

NVIDIA Nsight Compute CLI 可用于分析使用 mpirun 命令启动的应用程序。

  • 要在节点上分析所有 rank 并将所有性能分析数据存储在单个报告文件中

    ncu --target-processes all -o <report-name> mpirun [mpi arguments] <app> [app arguments]
    
  • 要分析多节点提交,每个节点可以使用一个 NVIDIA Nsight Compute CLI 实例。确保您为每个 rank 指定唯一的报告文件。

    mpirun [mpi arguments] ncu -o report_%q{OMPI_COMM_WORLD_RANK} <app> [app arguments]
    
  • 要分析单个 rank,可以使用包装脚本。以下脚本(名为“wrap.sh”)仅分析 rank 0

    #!/bin/bash
    if [[ $OMPI_COMM_WORLD_RANK == 0 ]]; then
       ncu -o report_${OMPI_COMM_WORLD_RANK}  --target-processes all "$@"
    else
       "$@"
    fi
    

    然后执行

    mpirun [mpi arguments] ./wrap.sh <app> [app arguments]
    

4.3.3. 输出页面

命令行性能分析器支持使用各种页面将结果打印到控制台。每个页面在 NVIDIA Nsight Compute 的性能分析器报告中都有对应的页面。在命令行性能分析器中,它们经过轻微调整以适合控制台输出。要选择页面,请使用 --page 选项。默认情况下,使用详细信息页面。请注意,如果未使用 --page 但使用了 --export,则不会将任何结果打印到控制台。

  • 详细信息: 此页面表示 NVIDIA Nsight Compute 的详细信息页面。对于每次分析的内核启动,每个收集的指标都作为 section 打印为三列表格,后跟应用于此 section 的任何规则结果。未与任何 section 关联的规则结果会在内核的 section 之后打印。

    第一个 section 表格列显示指标名称。如果指标在 section 中被赋予标签,则会改用该标签。第二列显示指标单位(如果可用)。第三列显示单位值。指标单位和值都会自动调整到最合适的数量级。默认情况下,仅显示 section 标头中定义的指标。可以通过在命令行中传递 --details-all 选项来更改此设置。

    某些指标将显示多个值,以“;”分隔,例如 memory_l2_transactions_global Kbytes 240; 240; 240; 240; 240。这些是实例指标,每个表示的实例都有一个值。实例可以是流式多处理器、汇编源代码行等。

  • 原始数据: 此页面表示 NVIDIA Nsight Compute 的原始数据页面。对于每次分析的内核启动,每个收集的指标都将打印为三列表格。除了来自 section 的指标外,这还包括自动收集的指标,例如设备属性和内核启动信息。

    第一列显示指标名称。第二列和第三列分别显示指标单位和值。指标单位和值都会自动调整到最合适的数量级。不包括未解析的 regex:、group: 或 breakdown: 指标。

4.3.4. 性能分析导入

使用 --import 选项,可以将保存的报告导入到命令行性能分析器中。使用此标志时,大多数其他选项都不可用,但某些结果筛选选项除外。它们在性能分析选项表中标记为如此。

4.3.5. 筛选后的性能分析导出

--import--export 选项以及支持的筛选选项一起使用,您可以将所需的结果从一个报告导出到另一个报告。此处也支持大多数可与单独的 --import 一起使用的筛选性能分析选项,但 --metrics--section 除外。

4.3.6. 指标和单位

在可用且适用时,指标会与其单位一起显示。这是为了明确指标是否表示周期、线程、字节/秒等等。

默认情况下,单位会自动缩放,以便指标值以合理的数量级显示。单位使用其 SI 系数进行缩放,即,基于字节的单位使用 1000 的因子和前缀 K、M、G 等进行缩放。基于时间的单位也使用 1000 的因子以及前缀 n、u 和 m 进行缩放。可以使用命令行选项更改此缩放,有关详细信息,请参阅控制台输出选项。

4.3.7. NVTX 过滤

--nvtx-include <configuration> --nvtx-exclude <configuration>
这些选项用于仅分析满足配置中提到的条件的内核。通过这些选项,您可以选择哪个内核属于特定范围或范围集合。

您可以多次使用这两个选项,提及所有 --nvtx-include 配置,然后提及所有 --nvtx-exclude 配置。NVTX 过滤需要 --nvtx 选项。

NVTX 范围有两种类型:NvtxRangeStart/End 和 NvtxRangePush/Pop。下面简要介绍了这两种类型的配置语法。范围和域名称都可以包含空格。请注意,以下示例中的“Domain”和“range”仅用于说明目的,并非标记域或范围名称所必需。

  • Push-Pop 范围

    量词

    描述

    示例

    /

    范围名称之间的分隔符。当仅给出一个范围名称时,必须附加分隔符以指示这是指 push/pop 范围。

    A_range/

    A_range/B 范围

    A_range/\*/B 范围

    [

    范围位于堆栈底部

    [A_range

    [A_range/+/范围 Z

    ]

    范围位于堆栈顶部

    范围 Z]

    范围 C/\*/范围 Z]

    两个其他范围之间只有一个 B 范围

    B 范围/+/范围 D

    *

    两个其他范围之间有零个或多个范围

    B 范围/\*/范围 Z

    @

    指定域名称。如果未提及,则假定为 <默认域>

    Domain-A@A_range

    Domain B@A_range/\*/范围 Z]

    包括包装在“<default-domain>”的 push/pop 范围“A_range”内的内核

    ncu --nvtx --nvtx-include "A_range/" CuNvtx.exe
    

    包括包装在“Domain-A”的 push/pop 范围“A_range”内的内核

    ncu --nvtx --nvtx-include "Domain-A@A_range/" CuNvtx.exe
    

    包括包装在“<default domain>”的 push/pop 范围“A_range”内的内核,其中“A_range”位于堆栈底部

    ncu --nvtx --nvtx-include "[A_range" CuNvtx.exe
    

    包括包装在“<default domain>”的 push/pop 范围“A_range”和“B range”内的内核,它们之间有零个或多个范围

    ncu --nvtx --nvtx-include "A_range/*/B range" CuNvtx.exe
    

    排除包装在“<default domain>”的 push/pop 范围“A_range”和“B range”内的内核,它们之间有零个或多个范围

    ncu --nvtx --nvtx-exclude "A_range/*/B range" CuNvtx.exe
    

    仅包括包装在“<default domain>”的 push/pop 范围“A_range”内但不包括堆栈顶部的“B range”内的内核

    ncu --nvtx --nvtx-include "A_range/" --nvtx-exclude "B range]" CuNvtx.exe
    
  • Start-End 范围

    量词

    描述

    示例

    ,

    范围名称之间的分隔符

    A_range,B 范围

    B 范围,A_range,范围 C

    @

    指定域名称。如果未提及,则假定为 <默认域>

    Domain-A@A_range

    Domain B@B 范围,范围 Z

    包括包装在“Domain-A”的 start/end 范围“A_range”内的内核

    ncu --nvtx --nvtx-include "Domain-A@A_range" CuNvtx.exe
    

    包括包装在“<default domain>”的 start/end 范围“A_range”和“B range”内的内核

    ncu --nvtx --nvtx-include "A_range,B range" CuNvtx.exe
    

    包括包装在“<default domain>”的 start/end 范围“A_range”或“B range”内的内核

    ncu --nvtx --nvtx-include "A_range" --nvtx-include "B range" CuNvtx.exe
    

    包括所有内核,但包装在“<default domain>”的 start/end 范围“A_range”内的内核除外

    ncu --nvtx --nvtx-exclude "A_range" CuNvtx.exe
    

    仅包括包装在“<default domain>”的 start/end 范围“B range”内而不是“A_range”内的内核

    ncu --nvtx --nvtx-include "B range"--nvtx-exclude "A_range" CuNvtx.exe
    
  • 正则表达式支持

    NvtxRangeStart/End 和 NvtxRangePush/Pop 这两种类型的配置语法相同。此外,要使用正则表达式,请遵循以下语法。

    • 提供前缀“regex:”以将 nvtx 配置视为正则表达式。

      ncu --nvtx --nvtx-include "regex:Domain[A-Z]@Range[0-9]/" CuNvtx.exe
      
      分析包装在域为匹配正则表达式“Domain[A-Z]”的 push/pop 范围(正则表达式为“Range[0-9]”)内的内核。
    • 仅当“[”或“]”分别位于范围部分的开头或结尾时,才为配置的范围部分提供前缀“/”到“[”或“]”。这是必需的,以便 NCU 可以区分“[”或“]”是正则表达式的一部分还是表示堆栈的顶部/底部。

      ncu --nvtx --nvtx-include "regex:[0-9]domainA@/[0-9]rangeA,RangeC[0-9/]" CuNvtx.exe
      
      分析包装在域为匹配正则表达式“[0-9]domainA”的 start/end 范围(正则表达式为“[0-9]rangeA”和“RangeC[0-9]”)内的内核。
    • 如果任何量词是域/范围名称的一部分,则需要使用“\\”或“\”作为前缀。对于“$”量词,仅“\\”前缀有效。

  • 其他信息

    --nvtx-include "DomainA@RangeA,DomainB@RangeB" //Not a valid config
    

    在单个 NVTX 配置中,可以指定与单个域相关的多个范围。不支持在单个 NVTX 配置中提及来自不同域的范围。

    --nvtx-include "A_range\[i\]"
    

    量词 @ , [ ] / * +(包括正则表达式量词)可以在域/范围名称中使用前缀“\”。分析应用程序中包装在“<default domain>”的“A_range[i]”内的内核。

    --nvtx-include "A_range"  //Start/End configuration
    --nvtx-inlcude "A_range/" //Push/Pop configuration
    --nvtx-inlcude "A_range]" //Push/Pop configuration
    

    如果域/范围名称包含“\”,则需要在配置中提供“\\\\”。

    不要在任何量词之前使用“\\\\”。

    对于 Push/Pop 配置,如果仅包含/排除单个范围而不指定堆栈帧位置“[”或“]”,请在末尾使用“/”量词。

    --nvtx-include "A_range/*/B range"
    

    提及 Push/Pop 配置的顺序很重要。在上面的示例中,“A_range”应位于范围堆栈中的“B range”下方,以便分析内核。

    NVTX 过滤遵循 cudaProfilerStart() 和 cudaProfilerStop()。不支持没有名称的范围。

4.3.8. 配置文件

使用 --config-file on/off 选项,可以启用或禁用从配置文件解析参数。
使用 --config-file-path <path> 选项,可以覆盖配置文件的默认路径和名称。
默认情况下,配置文件 config.ncu-cfg 在当前工作目录、Linux 上的 $HOME/.config/NVIDIA Corporation 和 Windows 上的 %APPDATA%\NVIDIA Corporation\ 中搜索。如果找到有效的配置文件,ncu 会解析该文件并将任何命令行参数初始化为文件中设置的值。如果在当前调用期间也显式设置了相同的命令行参数,则以后者为准。

可以在各种通用模式下设置参数,ncu 命令行参数用于确定需要从配置文件中解析哪个通用模式。有关更多详细信息,请参见下表。

命令行参数

通用模式

ncu –mode launch-and-attach CuVectorAddMulti.exe

启动并附加

ncu –mode launch CuVectorAddMulti.exe

启动

ncu –mode attach

附加

ncu –list-sets、ncu –list-sections、ncu –list-rules 和 ncu –list-metrics

列表

ncu –query-metrics

查询

ncu -i <MyReport.ncu-rep>

导入

这些通用模式应使用类似于 INI 的语法在配置文件中定义,如下所示

[<general-mode>]
<parameter>=<value>
;<comments>

用法示例

[Launch-and-attach]
-c = 1
--section = LaunchStats, Occupancy
[Import]
--open-in-ui
-c = 1
--section = LaunchStats, Occupancy

通过此配置,每当在 launch-and-attach 模式下分析应用程序时,ncu 都会解析在 [Launch-and-attach] 块下设置的参数。以相同的方式,每当导入报告时,都会解析在 [Import] 块下设置的参数。如果存在一组对每种模式通用的参数,则可以将不同的模式组合在一起。上面显示的示例可以在组合两种模式后重写为

[Launch-and-attach, import]
-c = 1
--section = LaunchStats, Occupancy
[Import]
--open-in-ui

其他要点

  • 诸如 --open-in-ui 之类的选项不需要设置任何值。这些选项不应传递任何值。

  • 诸如 --section 之类的选项可以在命令行中多次传递。这些选项应仅在通用模式下编写一次,所有必需的值都用逗号分隔,如下所示。显式设置这些选项的值不会覆盖配置文件值。相反,所有值都将组合在一起并设置为该选项。

    [<general-mode>]
    <parameter>=<value1>,<value2>,...
    

4.3.9. 内核重命名

在某些情况下,使用内核函数或重整名称很难区分结果。但是,反重整名称可能非常长且难以理解。为了处理这种情况,内核反重整名称在某种程度上会自动简化。要查看原始内核反重整名称,请使用 --rename-kernels off 选项禁用内核重命名。如果简化的内核反重整名称被证明没有用,则可以通过配置文件重命名它。内核重命名配置文件应为 YAML 文件,并以以下格式编写

-
 - Original: mergeRanksAndIndicesKernel(unsigned int *, unsigned int *, unsigned int, unsigned int, unsigned int)
 - Renamed: Merge Rank Kernel
-
 - Original: void mergeSortSharedKernel<(unsigned int)1>(unsigned int *, unsigned int *, unsigned int *, unsigned int *, unsigned int)
 - Renamed: Merge Sort Kernel
默认情况下,内核重命名配置文件 ncu-kernel-renames.yaml 的搜索方式与配置文件的搜索方式类似。
为避免在配置文件中手动编写反重整名称,可以使用 --rename-kernels-export on 选项将报告中的反重整名称导出到配置文件,并映射以重命名它们。
使用 --rename-kernels-path <path> 选项,可以覆盖导入重命名名称和导出时使用的文件的默认路径和名称。
请注意,重命名的名称稍后可用于使用 --kernel-name--kernel-id 选项筛选报告中的内核。

4.4. 命令行选项

对于长命令行选项,传递唯一的初始子字符串可能就足够了。

4.4.1. 常规

常规命令行选项

选项

描述

默认

h,help

显示帮助消息

v,version

显示版本信息

mode

选择与目标应用程序交互的模式

  • launch-and-attach: 启动目标应用程序并立即附加以进行性能分析。

  • launch: 启动目标应用程序并在第一个拦截的 API 调用中挂起,等待工具附加。

  • attach: 附加到先前启动且未附加其他工具的应用程序。

启动并附加

p,port

用于连接到 --mode launch/attach 的目标应用程序的基本端口

49152

max-connections

用于连接到目标应用程序的最大端口数

64

config-file

使用 config.ncu-cfg 配置文件设置参数。在当前工作目录、“$HOME/.config/NVIDIA Corporation”(在 Linux 上)和“%APPDATA%\NVIDIA Corporation\”(在 Windows 上)中搜索。

on

config-file-path

覆盖配置文件的默认路径。

4.4.2. 启动

启动命令行选项

选项

描述

默认

check-exit-code

检查应用程序退出代码,如果退出代码不是 0,则打印错误。如果设置了此选项,则当退出代码不是 0 时,--replay-mode application 将在第一次传递后停止。

yes

injection-path-64

覆盖注入库的默认路径。注入库供工具用于拦截相关 API(如 CUDA 或 NVTX)。

preload-library

在注入库之前,预先加载要由应用程序加载的共享库。可以多次指定此选项,库将按照指定的顺序加载。

call-stack

启用 CPU 调用堆栈收集。

false

call-stack-type

设置应收集的调用堆栈类型。可以指定多种类型。暗示 –call-stack

请注意,Python 调用堆栈收集需要 CPython 版本 3.9 或更高版本。

native

示例

--call-stack-type native --call-stack-type python

nvtx

为工具启用 NVTX 支持。

false

target-processes

选择要分析的进程。可用模式包括

  • application-only 仅分析根应用程序进程。

  • all 分析应用程序及其所有子进程。

all

target-processes-filter

设置逗号分隔的表达式以筛选要分析的进程。

  • <process name> 设置要包含在性能分析中的确切进程名称。

  • regex:<expression> 设置正则表达式以筛选匹配的进程名称性能分析。在将正则表达式符号识别为特殊字符的 shell(例如 Linux bash)上,需要使用引号转义表达式,例如 --target-processes-filter regex:".*Process"

    使用 regex: 时,表达式不能包含任何逗号。

  • exclude:<process name> 设置要从性能分析中排除的确切进程名称。

  • exclude-tree:<process name> 设置要从性能分析和进一步进程跟踪中排除的确切进程名称。即使子进程与肯定筛选器匹配,也不会对它们进行性能分析。此选项在 Windows 上不可用。

进程的可执行文件名部分将在匹配项中考虑。筛选器的处理在第一个匹配项处停止。如果指定了任何肯定筛选器,则不会对任何与肯定筛选器不匹配的进程进行性能分析。

示例

--target-processes-filter MatrixMul 筛选可执行文件名与“MatrixMul”完全相同的所有进程。

--target-processes-filter regex:Matrix筛选可执行文件名中包含字符串“Matrix”的所有进程,例如“MatrixMul”和“MatrixAdd”。

--target-processes-filter MatrixMul,MatrixAdd过滤所有可执行文件名与 “MatrixMul” 或 “MatrixAdd” 完全相同的进程。

--target-processes-filter exclude:MatrixMul.exe 仅排除 “MatrixMul.exe”。

--target-processes-filter exclude-tree:ChildLauncher,ParentProcess 排除 “ChildLauncher” 及其所有子进程。包含(仅)“ParentProcess”,但如果它是 “ChildLauncher” 的子进程则不包含。

support-32bit

支持分析从 32 位应用程序启动的进程。此选项仅在 x86_64 Linux 上可用。在 Windows 上,默认启用跟踪 32 位应用程序。

no

null-stdin

启动应用程序时使用 ‘/dev/null’ 作为其标准输入。这避免了应用程序从标准输入读取时被 SIGTTIN 信号停止,并在作为后台进程运行时挂起。

false

4.4.3. Attach

Attach 命令行选项

选项

描述

默认

hostname

设置用于连接到目标应用程序正在运行的机器的主机名或 IP 地址。当附加到本地目标应用程序时,请使用 127.0.0.1。

127.0.0.1

4.4.4. Profile

Profile 命令行选项

选项

描述

默认值/示例

devices

列出要启用性能分析的 GPU 设备,以逗号分隔。1

所有设备

示例

--devices 0,2

filter-mode

设置内核启动的过滤模式。可用模式

  • global: 统一对内核启动应用提供的启动过滤器。

  • per-gpu: 在每个设备上分别对内核启动应用提供的启动过滤器。此模式的有效启动过滤器是 --launch-count--launch-skip

  • per-launch-config: 针对每个 GPU 启动参数(即网格大小、块大小和共享内存),分别对内核启动应用内核过滤器和启动过滤器。

global

kernel-id

设置用于匹配内核的标识符。如果内核与标识符不匹配,则在性能分析中将被忽略。

标识符必须采用以下格式:context-id:stream-id:[name-operator:]kernel-name:invocation-nr

  • context-id 是 CUDA 上下文 ID 或上下文 ID 的正则表达式、NVTX 名称。

  • stream-id 是 CUDA 流 ID 或流 ID 的正则表达式、NVTX 名称。

  • name-operatorkernel-name 的可选运算符。目前,仅支持 regex 运算符。

  • kernel-name 是用于匹配内核名称的表达式。默认情况下,这是对 --kernel-name-base 指定内容的完整字面匹配。当指定可选的 regex 名称运算符时,这是对 --kernel-name-base 指定内容的局部正则表达式匹配。

  • invocation-nr 是匹配内核过滤器的第 N 次调用,即上下文 ID、流 ID、内核名称、网格维度、块维度和共享内存字节数都将用于调用计数。如果未提供上下文 ID 或流 ID,则相应的 ID 不会用于调用计数。如果可以使用正则表达式指定多次调用。也可以使用正则表达式指定多次调用。

如果上下文/流 ID 是正数,则将严格对照 CUDA 上下文/流 ID 进行匹配。否则,它将被视为正则表达式,并对照使用 NVTX 库指定的上下文/流名称进行匹配。1

示例

--kernel-id ::foo:2 对于内核 “foo”,匹配第二次调用。

--kernel-id :::".*5|3" 对于所有内核,匹配第三次调用,以及所有调用编号以 “5” 结尾的调用。

--kernel-id ::regex:^.*foo$: 匹配所有以 “foo” 结尾的内核。

--kernel-id ::regex:^(?!foo): 匹配除以 “foo” 开头的所有内核。请注意,根据您的操作系统和 shell,您可能需要引用该表达式,例如在 Linux bash 中使用单引号: --kernel-id ::regex:'^(?!foo)':

--kernel-id 1|5:2::7 匹配从上下文 1 + 流 2 以及上下文 5 + 流 2 启动的内核的所有第七次内核调用。

k,kernel-name

设置用于匹配内核名称的表达式。

  • <kernel name> 设置内核名称以进行精确匹配。

  • regex:<expression> 设置用于匹配内核名称的正则表达式。在将正则表达式符号识别为特殊字符的 shell(例如 Linux bash)上,表达式需要用引号转义,例如 --kernel-name regex:".*Foo"

如果内核名称或提供的表达式不匹配,则在性能分析中将被忽略。1

示例

-k foo 匹配所有名称完全为 “foo” 的内核。

-k regex:foo 匹配所有包含字符串 “foo” 的内核,例如 “foo” 和 “fooBar”。

-k regex:"foo|bar" 匹配所有包含字符串 “foo” 或 “bar” 的内核,例如 “foo”、“foobar”、“_bar2”。

kernel-name-base

设置 --kernel-name--kernel-id 内核名称的基础。1 选项包括

  • function: 不带参数、模板等的函数名称。例如 dmatrixmul

  • demangled: 反混淆的函数名称,包括参数、模板等。例如 dmatrixmul(float*,int,int)。使用 内核重命名 来重命名反混淆的名称。

  • mangled: 混淆的函数名称。例如 _Z10dmatrixmulPfiiS_iiS_

function

rename-kernels

对内核反混淆名称执行简化。使用配置文件重命名反混淆名称。有关更多详细信息,请参阅 内核重命名

on

rename-kernels-export

将报告中的反混淆名称导出到新文件,并指定用于重命名的映射。使用 --rename-kernels-path 选项指定导出文件路径。

off

rename-kernels-path

覆盖配置文件的默认路径,该文件应在导入重命名的内核或导出反混淆名称时使用。仅在使用 --rename-kernels--rename-kernels-export 时有效。

c,launch-count

限制分析的内核启动次数。计数仅针对与内核过滤器匹配的启动递增。1

s,launch-skip

设置开始分析内核之前要跳过的内核启动次数。该数字仅考虑与内核过滤器匹配的启动。1

0

launch-skip-before-match

设置开始分析之前要跳过的内核启动次数。计数针对所有启动递增,无论内核过滤器如何。1

0

range-filter

过滤器,用于分析匹配的 NVTX 范围或通过 cu(da)ProfilerStart/Stop API 创建的开始/停止范围的指定实例。

[yes/no/on/off]:[start/stop range instance(s)]:[NVTX range instance(s)] 格式指定

  • [yes/no/on/off]:默认为 ‘no/off’。如果设置为 ‘yes/on’,则 NVTX 范围编号从每个开始/停止范围内的 1 开始。

  • 以正则表达式形式提供数字,例如 [2-4] 或 2|3|4,以分析匹配范围的第 2、3 和 4 个实例。

  • NVTX 范围编号将针对使用 –nvtx-include 提供的匹配范围进行计数。

示例

--range-filter :2:3 --nvtx-include A/ 匹配应用程序中的第 2 个开始/停止范围以及第 3 个 NVTX 推入/弹出范围 A。

--range-filter yes:2:3 --nvtx-include A/ 从第 2 个开始/停止范围匹配第 3 个 NVTX 推入/弹出范围 A。

kill

当分析完请求的 –launch-count 时,终止目标应用程序。允许的值

  • on/off

  • yes/no

no

replay-mode

用于多次重放内核启动以收集所有请求的性能分析数据的机制

  • kernel: 在应用程序执行期间“透明地”重放单个内核启动。有关更多详细信息,请参阅 内核重放

  • application: 多次重新启动整个应用程序。需要确定性的程序执行。有关更多详细信息,请参阅 应用程序重放

  • range: 在应用程序执行期间“透明地”重放 CUDA API 调用和内核启动的范围。范围必须使用 cu(da)ProfilerStart/Stop API 对或 NVTX 表达式定义。有关更多详细信息,请参阅 范围重放

  • app-range: 通过多次重新启动整个应用程序来分析范围,而无需 API 捕获。需要确定性的程序执行。范围必须使用 cu(da)ProfilerStart/Stop API 对或 NVTX 表达式定义。有关更多详细信息,请参阅 应用程序范围重放

kernel

app-replay-buffer

应用程序重放缓冲区位置。

  • file: 重放传递数据缓存在临时文件中。报告在性能分析完成后创建。此模式更具可扩展性,因为所需内存量不会随着分析的内核数量而扩展。

  • memory: 重放传递数据缓存在内存中,报告在性能分析期间创建。如果文件系统速度较慢,则此模式可以带来更好的性能,但所需内存量会随着分析的内核数量而扩展。

file

app-replay-match

应用程序重放内核匹配策略。对于所有选项,内核都基于每个进程和每个设备 (GPU) 进行匹配。以下选项用于更详细地配置应用的策略。

  • name: 内核按以下顺序匹配:1. (混淆) 名称,2. 执行顺序

  • grid: 内核按以下顺序匹配:1. (混淆) 名称,2. CUDA 网格/块大小,3. 执行顺序

  • all: 内核按以下顺序匹配:1. (混淆) 名称,2. CUDA 网格/块大小,3. CUDA 上下文 ID,4. CUDA 流 ID,5. 执行顺序

grid

app-replay-mode

应用程序重放内核匹配模式

  • strict: 要求所有筛选的内核在所有重放传递中以完全相同的顺序匹配。

  • balanced: 要求所有筛选的内核在所有重放传递中匹配,无需严格排序。

  • relaxed: 仅为可以在重放传递中匹配的筛选内核生成结果。未匹配的内核将被丢弃。

balanced

range-replay-options

范围重放选项,以逗号分隔。支持以下选项

  • enable-greedy-sync

    在捕获期间为适用的延迟 API 插入上下文同步。

  • disable-host-restore

    禁用恢复设备写入的主机分配。

none

graph-profiling

CUDA 图形性能分析模式

  • node

    将单个内核节点作为常规 CUDA 内核进行性能分析。

  • graph

    将整个图形作为一个工作负载进行性能分析(但禁用单个图形内核节点的性能分析)。有关此模式的更多信息,请参阅 内核性能分析指南

node

list-sets

列出在搜索到的 section 文件夹中找到的所有 section 集并退出。对于每个集,都会显示关联的 section,以及作为此集一部分收集的指标的估计数量。此数字可用作估计此集的每个内核启动的相对性能分析开销。

set

要收集的 section 集的标识符。如果未指定,则收集 basic 集。可以使用 --set full 收集完整的 section 集。

如果未给出 --set 选项,则收集 basic 集。如果未指定且使用了 --section--metrics,则不收集任何集。使用 --list-sets 查看哪个集是默认集。

list-sections

列出在搜索到的 section 文件夹中找到的所有 section 并退出。

section

添加要收集的 section 标识符,方式如下

  • <section identifier> 设置 section 标识符以进行精确匹配。

  • regex:<expression> 正则表达式允许匹配完整的 section 标识符。例如,.*Stats,匹配所有以 ‘Stats’ 结尾的 section。在将正则表达式符号识别为特殊字符的 shell(例如 Linux bash)上,表达式需要用引号转义,例如 --section "regex:.*Stats"

当与 --import--page raw--page source 一起使用时,此选项将被忽略。1

如果未给出 --section 选项,则收集与 basic 集关联的 section。如果未找到任何集,则收集所有 section。

section-folder

.section.py 规则文件添加非递归搜索路径。此文件夹中的 section 文件将可用于 --section 选项。将忽略包含 .ncu-ignore 文件的目录中的单个文件。

如果未给出 --section-folder 选项,则默认添加 sections 文件夹。

section-folder-recursive

.section.py 规则文件添加递归搜索路径。此文件夹及其以下所有文件夹中的 section 文件将可用于 --section 选项。将忽略包含 .ncu-ignore 文件的目录中的单个文件。

如果未给出 --section-folder 选项,则默认添加 sections 文件夹。

list-rules

列出在搜索到的 section 文件夹中找到的所有规则并退出。

apply-rules

将活动和适用的规则应用于每个性能分析结果。使用 --rule 限制要应用的规则。允许的值

  • on/off

  • yes/no

yes

rule

添加要应用的规则标识符。暗示 --apply-rules yes

如果未给出 --rule 选项,则应用 sections 文件夹中的所有适用规则。

import-source

如果可从 -lineinfo 获得,则将相关的 CUDA 源文件永久导入到报告中。允许的值

  • on/off

  • yes/no

使用 --source-folders 选项提供缺少的源文件。

no

source-folders

添加逗号分隔的递归搜索路径,用于查找要导入到报告中的缺失 CUDA 源文件。

list-metrics

列出从活动 section 收集的所有指标。如果使用 --section 选项限制了活动 section 列表,则仅列出这些 section 中的指标。

query-metrics

查询系统上设备的可用指标。使用 --devices--chips 筛选要查询的设备。请注意,默认情况下,列出的指标名称需要附加有效的后缀才能成为有效指标。请参阅 --query-metrics-mode 以了解如何获取有效后缀列表,或查看 内核性能分析指南

query-metrics-mode

设置查询指标的模式。暗示 --query-metrics。可用模式

  • base: 仅指标的基本名称。

  • suffix: 基本指标的后缀名称。这给出了从基本指标派生的所有指标的列表。使用 --metrics 指定要查询的基本指标。

  • all: 所有指标的完整名称。这给出了所有基本指标及其后缀指标的列表。

base

query-metrics-collection

设置要查询的指标收集类型。暗示 --query-metrics。可用集合

  • device: 查询 CUDA 设备属性。

  • groups: 查询可用于性能分析的指标组。

  • launch: 查询启动属性。

  • numa: 查询 NUMA 拓扑指标。

  • nvlink: 查询 NVLink 拓扑指标。

  • pmsampling: 查询可用于 PM 采样的指标。

  • profiling: 查询可用于性能分析的指标。

  • source: 查询可用于性能分析的源指标。

  • stats: 查询性能分析器生成的用于告知性能分析统计信息的指标。

  • warpsampling: 查询可用于 Warp 采样的指标。

profiling

metrics

指定要分析的所有指标,以逗号分隔。如果未给出 --section 选项,则仅收集包含使用此选项列出的所有指标的临时 section。如果除了 --metrics 之外还给出了 --section 选项,则收集这些 section 以及 --metrics 中的所有指标。

传递给此选项的名称支持以下前缀

  • regex:<expression> 扩展到与表达式部分匹配的所有指标。将正则表达式括在 ^…$ 中以强制完全匹配。

  • group:<name> 列出具有该名称的指标组的所有指标。有关有效的组名称,请参阅 section 文件。

  • breakdown:<metric> 扩展到高级吞吐量指标的输入指标。

  • pmsampling:<metric> 使用 PM 采样收集指标。仅支持不需要 SASS 修补 (_sass_) 的单次传递指标。使用此前缀会将时间线元素添加到报告的详细信息页面。

不支持组合多个前缀。

如果指标需要后缀才能有效,并且未使用 regex:group:,则此选项会自动将名称扩展到所有可用的第一级子指标。

导入报告时,不支持 :group:breakdown

使用 regex: 时,表达式不得包含任何逗号。1

disable-extra-suffixes

禁用收集所有指标的额外后缀(avg、min、max、sum)。仅收集明确指定的指标。

list-chips

列出所有支持的芯片,这些芯片可以与 --chips 一起使用。

chips

指定用于查询指标的芯片,以逗号分隔。

示例

--chips gv100,tu102

profile-from-start

设置是否应从应用程序启动时开始分析。允许的值

  • on/off

  • yes/no

yes

disable-profiler-start-stop

禁用性能分析器启动/停止。启用后,cu(da)ProfilerStart/Stop API 调用将被忽略。

quiet

禁止所有性能分析输出。

verbose

使性能分析器输出更详细。

cache-control

控制性能分析期间 GPU 缓存的行为。允许的值

  • all: 在性能分析期间的每次内核重放迭代之前,都会刷新所有 GPU 缓存。虽然在不使缓存失效的情况下,应用程序执行环境中的指标值可能略有不同,但此模式在重放传递以及目标应用程序的多次运行中提供了最可重现的指标结果。

  • none: 在性能分析期间不刷新 GPU 缓存。如果指标收集只需要单次内核重放传递,这可以提高性能并更好地复制应用程序行为。但是,某些指标结果会因先前的 GPU 工作以及重放迭代之间而异。这可能会导致指标值不一致和超出范围。

all

clock-control

控制性能分析期间 GPU 时钟的行为。允许的值

  • base: 在性能分析期间,GPC 和内存时钟锁定到各自的基本频率。这对热节流没有影响。请注意,实际时钟可能仍然会变化,具体取决于驱动程序对此功能的支持级别。作为替代方案,请使用 nvidia-smi 在外部锁定时钟,并将此选项设置为 none

  • none: 在性能分析期间,不更改 GPC 或内存频率。

  • reset: 为所有或选定的设备重置 GPC 和内存时钟并退出。如果之前被终止的 ncu 执行使 GPU 时钟处于锁定状态,请使用此选项。

base

pipeline-boost-state

控制 Tensor Core 提升状态。建议设置稳定的 Tensor Core 提升以进行应用程序性能分析,从而确保可预测的运行到运行性能。允许的值

  • stable: 将 Tensor Core 提升状态设置为稳定。

  • dynamic: 将 Tensor Core 提升状态设置为动态。

stable

nvtx-include

NVTX 过滤器添加 include 语句,该语句允许根据 NVTX 范围选择要分析的内核。1

nvtx-exclude

NVTX 过滤器添加 exclude 语句,该语句允许根据 NVTX 范围选择要分析的内核。1

nvtx-push-pop-scope

指定推入-弹出范围的范围。

  • thread: NVTX 推入/弹出范围的作用域限定为每个线程。

  • process: NVTX 推入/弹出范围的作用域限定为每个进程。

thread

1(1,2,3,4,5,6,7,8,9,10,11)

当使用 --import 时,此筛选选项可用。

4.4.5. PM Sampling

这些选项适用于 PM 采样。有关 Warp 状态采样中使用的选项,请参阅 此处

PM 采样命令行选项

选项

描述

默认

pm-sampling-interval

以周期或纳秒为单位设置 PM 采样间隔(取决于架构),或者在为 0 时动态确定。

0 (自动)

pm-sampling-buffer-size

以字节为单位设置设备端 PM 采样分配的大小,或者在为 0 时动态确定。

0 (自动)

pm-sampling-max-passes

设置用于 PM 采样的最大传递次数,或者在为 0 时动态确定。

0 (自动)

4.4.6. Warp Sampling

这些选项适用于 Warp 状态采样。有关 PM 采样中使用的选项,请参阅 此处

Warp 采样命令行选项

选项

描述

默认

warp-sampling-interval

在 [0..31] 范围内设置采样周期。实际频率为 2 ^ (5 + 值) 个周期。如果设置为 ‘auto’,则性能分析器会尝试自动确定高采样频率,而不会跳过样本或使输出缓冲区溢出。

auto

warp-sampling-max-passes

设置用于采样的最大传递次数(有关性能分析开销的更多详细信息,请参阅 内核性能分析指南)。

5

warp-sampling-buffer-size

以字节为单位设置设备端样本分配的大小。

32*1024*1024

4.4.7. File

File 命令行选项

选项

描述

默认

log-file

将所有工具输出发送到指定文件或标准通道之一。该文件将被覆盖。如果该文件不存在,将创建一个新文件。“stdout” 作为完整文件名表示标准输出通道 (stdout)。“stderr” 作为完整文件名表示标准错误通道 (stderr)。”

如果未设置 --log-file,性能分析结果将打印在控制台上。

o,export

设置用于写入性能分析报告的输出文件。如果未设置,将使用一个临时文件,该文件稍后将被删除。与 --import 选项一起使用以保存筛选后的结果。有关更多详细信息,请参阅 筛选后的性能分析导出。指定的名称支持宏展开。有关更多详细信息,请参阅 文件宏

如果设置了 --export 且未给出 --page 选项,则不会在控制台上打印任何性能分析结果。

f,force-overwrite

强制覆盖所有输出文件。

默认情况下,性能分析器不会覆盖现有输出文件,而是显示错误。

i,import

设置用于读取性能分析结果的输入文件。

open-in-ui

在 UI 中打开报告,而不是在终端上显示结果。(仅在主机平台上可用)

section-folder-restore

将库存文件恢复到默认 section 文件夹或随附 –section-folder 选项指定的文件夹。如果操作将覆盖已修改的文件,则需要 –force-overwrite 选项。

4.4.8. 控制台输出

控制台输出命令行选项

选项

描述

默认

csv

使用逗号分隔值作为控制台输出。默认情况下,隐含 –print-units base。

page

选择要打印控制台输出的报告页面。可用页面有

  • details 显示按 section 分组的结果,包括规则结果。如果在任何 section 中或使用 --metrics 未明确指定,则会省略默认收集的某些指标(例如,设备属性)。

  • raw 显示内核启动收集的所有指标。

  • source 显示源代码。请参阅 --print-source 以选择源代码视图。

  • session 显示启动设置、会话信息、进程信息和设备属性。

details。如果未给出 --page 选项且设置了 --export,则不会将任何结果打印到控制台输出。

print-source

选择源代码视图

  • sass 显示每次内核启动的 SASS(汇编)指令。

  • ptx 显示每个 cubin 的 PTX 源代码,其中至少有一个内核被分析。

  • cuda 显示整个 CUDA-C 源文件,其中包含每次内核启动的内核代码。仅当主机上存在文件时,CLI 才会显示 CUDA 源代码。

  • cuda,sass 显示每次内核启动的 SASS CUDA-C 源代码关联。仅当主机上存在文件时,CLI 才会显示 CUDA 源代码。

指标与源代码的关联在 sasscuda,sass 源代码视图中可用。使用 --metrics 指定的指标和使用 --section 指定的 section 文件是相关的。考虑限制所选指标的数量,以使值适合单个输出行。

sass

resolve-source-file

--page source 输出中解析 CUDA 源文件。提供逗号分隔文件的完整路径。

print-details

选择应在详细信息页面输出中显示的 section 的哪个部分

  • header 显示 section 标头中的所有指标。

  • body 显示 section 主体中的所有指标。

  • all 显示 section 中的所有指标。

替换已弃用的选项 --details-all

header

print-metric-name

选择一个选项以在“指标名称”列中显示它

  • label 显示指标标签。

  • name 显示指标名称。

  • label-name 同时显示指标标签和指标名称。

label

print-units

选择指标单位缩放的模式。可用模式有

  • auto 显示自动缩放到最合适的数量级的所有指标。

  • base 以其基本单位显示所有指标。

auto

print-metric-attribution

显示绿色上下文结果的指标的归因级别。

false

print-fp

在控制台输出中将所有数值指标显示为浮点数。

false

print-kernel-base

设置内核名称输出的基础。有关选项,请参阅 --kernel-regex-base

demangled

print-metric-instances

设置具有实例值的指标的输出模式

  • none 仅显示 GPU 聚合值。

  • values 显示 GPU 聚合值,后跟所有实例值。

  • details 显示聚合值,后跟关联 ID 和实例值

none

print-nvtx-rename

选择如何使用 NVTX 进行重命名

  • none 不使用 NVTX 进行重命名。

  • kernel 使用最近的封闭 NVTX push/pop 范围重命名内核。

none

print-rule-details

打印规则结果的附加详细信息,例如触发指标。当前在 CSV 模式下无效。

false

print-summary

选择摘要输出模式。可用模式有

  • none 没有摘要。

  • per-gpu 每个 GPU 的摘要。

  • per-kernel 每种内核类型的摘要。

  • per-nvtx 每个 NVTX 上下文的摘要。

none

4.4.9. 响应文件

可以通过将 @FileName 添加到命令行来指定响应文件。文件名必须紧跟 @ 字符。每个响应文件的内容都将插入到相应的响应文件选项的位置。

4.4.10. 文件宏

使用选项 -o--export 指定的文件名支持以下宏展开。报告文件名中出现的这些宏将被替换为相应的字符序列。除非另有说明,否则宏不能用作文件路径的一部分。

宏展开

描述

%h

展开为主机名,即命令行分析器正在运行的计算机的名称。

%q{ENV_NAME}

展开为命令行分析器环境中具有给定名称 ENV_NAME 的变量的内容。

%p

展开为命令行分析器的进程 ID。

%i

展开为最低的未使用正整数,以保证生成的文件名尚未使用。此宏在输出文件名中只能使用一次。

%%

展开为输出文件名中的单个 % 字符。此宏可以在文件路径和文件名中使用。

4.5. 环境变量

以下环境变量可以在启动 NVIDIA Nsight Compute CLI 或 UI 之前分别设置。

表 10. 环境变量

名称

描述

默认值/值

NV_COMPUTE_PROFILER_DISABLE_STOCK_FILE_DEPLOYMENT

禁用文件部署到版本化的 Sections 目录,而是使用安装目录中 stock 目录下的 section 和 rule 文件。

默认情况下,使用用户文档文件夹中的版本化目录,以确保考虑到任何潜在的用户更新。

仅在 NVIDIA Nsight Compute CLI 中受支持。

默认值:未设置

设置为 “1” 以禁用部署。

NV_COMPUTE_PROFILER_LOCAL_CONNECTION_OVERRIDE

覆盖前端和分析目标进程之间默认的本地连接机制。默认机制取决于平台。只有当本地启动中的前端和目标进程之间存在连接问题时,才应使用此选项。

默认值:未设置(使用默认机制)

设置为 “uds” 以使用 Unix 域套接字连接(仅在 Posix 平台上可用)。设置为 “tcp” 以使用 TCP(在所有平台上都可用)。设置为 “named-pipes” 以使用 Windows 命名管道(仅在 Windows 上可用)。

NV_COMPUTE_PROFILER_DISABLE_SW_PRE_PASS

禁用指令级软件 (SW) 指标预先扫描。当收集 SW 补丁指标(例如 inst_executed)时,预先扫描用于确定哪些函数作为内核的一部分执行并应进行修补。这需要单独的重放扫描,并且如果仅收集指令级 SW 指标,则会阻止单次数据收集。如果不需要内存保存和恢复且应用程序重放不可能,则禁用预先扫描可以提高性能。

默认值:未设置(在适用时使用预先扫描)

设置为 “1” 以禁用预先扫描。

4.6. Nvprof 迁移指南

本指南提供了从 nvprof 迁移到 NVIDIA Nsight Compute CLI 的技巧。NVIDIA Nsight Compute CLI 尝试提供与 nvprof 尽可能多的功能和使用对等性,但某些功能现在由不同的工具覆盖,并且某些命令行选项已更改其名称或含义。

4.6.1. 跟踪

  • GPU 和 API 跟踪

    NVIDIA Nsight Compute CLI 不支持任何形式的 GPU 或 API 活动跟踪。此功能由 NVIDIA Nsight Systems 覆盖。

4.6.2. 指标收集

  • 查找可用指标

    对于 nvprof,您可以使用 --query-metrics 来查看机器上当前设备可用的指标列表。您还可以使用 --devices 来过滤要查询的本地设备。对于 NVIDIA Nsight Compute CLI,此功能是相同的。但是,此外,您可以将 --query-metrics--chip [chipname] 结合使用,以查询任何芯片的可用指标,而不仅仅是当前 CUDA 设备中的指标。

    请注意,nvprof 和 NVIDIA Nsight Compute CLI 之间的指标名称已更改,并且 GV100 之后(包括 GV100)和之前的芯片之间的指标名称也不同。有关 nvprof 和 NVIDIA Nsight Compute 指标名称的比较,请参阅 指标比较

    在 Volta 及更高版本的 GPU 上,大多数指标都使用基本名称和各种后缀命名,例如 sm__throughput.avg.pct_of_peak_sustained_elapsed。基本名称是 sm__throughput,后缀是 avg.pct_of_peak_sustained_elapsed。这是因为大多数指标都遵循相同的结构并具有相同的后缀集。在为分析选择指标时,您需要将完整名称传递给 NVIDIA Nsight Compute。

    为了减少在使用 --query-metrics 时为 Volta 及更高版本的 GPU 显示的指标数量,默认情况下仅显示基本名称。使用 --query-metrics-mode suffix --metrics <metrics list> 查看所选指标的完整名称。使用 --query-metrics-mode all 直接查看所有指标及其完整名称。

  • 选择要收集的指标

    在 nvprof 和 NVIDIA Nsight Compute CLI 中,您都可以在 --metrics 选项中指定逗号分隔的指标名称列表。虽然 nvprof 允许您收集列表或所有指标,但在 NVIDIA Nsight Compute CLI 中,您可以使用正则表达式来选择所有可用指标的更精细的子集。例如,您可以使用 --metrics "regex:.*" 收集所有指标,或使用 --metrics "regex:smsp__cycles_elapsed" 收集所有 “smsp__cycles_elapsed” 指标。

  • 选择要收集的事件

    您无法在 NVIDIA Nsight Compute CLI 中收集任何事件。

  • 选择要收集的 section

    在 nvprof 中,您可以收集单个指标或事件,或预配置的集合(all、analysis-metrics)。NVIDIA Nsight Compute CLI 添加了 section 的概念。section 是一个文件,用于描述要为哪个 GPU 架构或架构范围收集哪些指标。此外,它还定义了这些指标如何在命令行输出或用户界面中显示。这包括在表格、图表、直方图等中进行结构化。

    NVIDIA Nsight Compute CLI 附带一组预定义的 section,位于 sections 目录中。您可以检查、修改或扩展这些 section,以及添加新的 section,例如,轻松收集重复的指标集。每个 section 都指定一个唯一的section 标识符,并且在搜索路径中不得有两个具有相同标识符的 section。

    默认情况下,收集与 basic section 集关联的 section。您可以使用 --section [section identifier] 选项一次或多次选择一个或多个单独的 section。如果未给出 --section 选项,但使用了 --metrics,则不会收集任何 section。

  • 选择要收集的 section 集

    在 nvprof 中,您可以收集单个指标或事件,或预配置的集合(all、analysis-metrics)。NVIDIA Nsight Compute CLI 添加了section 集的概念。section 集定义了一组要一起收集的 section,以便根据所需的分析详细程度实现不同的分析开销。

    如果未选择其他选项,则收集 basic section 集。您可以使用 --set [set identifier] 选项一次或多次选择一个或多个集。如果未给出 --set 选项,但使用了 --section--metrics,则不会收集任何集。

4.6.3. 指标比较

NVIDIA Nsight Compute 使用两组指标,具体取决于分析的 GPU 架构。对于 nvprof 指标,下表列出了 NVIDIA Nsight Compute 中的等效指标(如果可用)。有关 PerfWorks 指标结构的详细说明,请参阅 指标结构

sm__& 开头的指标是按 SM 收集的。以 *smsp__ 开头的指标是按 SM 子分区收集的。但是,所有相应的 nvprof 事件仅按 SM 收集。有关这些术语的更多详细信息,请查看 指标指南

表 11. 从 CUPTI 到 PerfWorks 的指标映射表

nvprof 指标

PerfWorks 指标或公式 (>= SM 7.0)

achieved_occupancy

sm__warps_active.avg.pct_of_peak_sustained_active

atomic_transactions

l1tex__t_set_accesses_pipe_lsu_mem_global_op_atom.sum + l1tex__t_set_accesses_pipe_lsu_mem_global_op_red.sum

atomic_transactions_per_request

(l1tex__t_sectors_pipe_lsu_mem_global_op_atom.sum + l1tex__t_sectors_pipe_lsu_mem_global_op_red.sum) / (l1tex__t_requests_pipe_lsu_mem_global_op_atom.sum + l1tex__t_requests_pipe_lsu_mem_global_op_red.sum)

branch_efficiency

smsp__sass_average_branch_targets_threads_uniform.pct

cf_executed

smsp__inst_executed_pipe_cbu.sum + smsp__inst_executed_pipe_adu.sum

cf_fu_utilization

不适用

cf_issued

不适用

double_precision_fu_utilization

smsp__inst_executed_pipe_fp64.avg.pct_of_peak_sustained_active

dram_read_bytes

dram__bytes_read.sum

dram_read_throughput

dram__bytes_read.sum.per_second

dram_read_transactions

dram__sectors_read.sum

dram_utilization

dram__throughput.avg.pct_of_peak_sustained_elapsed

dram_write_bytes

dram__bytes_write.sum

dram_write_throughput

dram__bytes_write.sum.per_second

dram_write_transactions

dram__sectors_write.sum

eligible_warps_per_cycle

smsp__warps_eligible.sum.per_cycle_active

flop_count_dp

smsp__sass_thread_inst_executed_op_dadd_pred_on.sum + smsp__sass_thread_inst_executed_op_dmul_pred_on.sum + smsp__sass_thread_inst_executed_op_dfma_pred_on.sum * 2

flop_count_dp_add

smsp__sass_thread_inst_executed_op_dadd_pred_on.sum

flop_count_dp_fma

smsp__sass_thread_inst_executed_op_dfma_pred_on.sum

flop_count_dp_mul

smsp__sass_thread_inst_executed_op_dmul_pred_on.sum

flop_count_hp

smsp__sass_thread_inst_executed_op_hadd_pred_on.sum + smsp__sass_thread_inst_executed_op_hmul_pred_on.sum + smsp__sass_thread_inst_executed_op_hfma_pred_on.sum * 2

flop_count_hp_add

smsp__sass_thread_inst_executed_op_hadd_pred_on.sum

flop_count_hp_fma

smsp__sass_thread_inst_executed_op_hfma_pred_on.sum

flop_count_hp_mul

smsp__sass_thread_inst_executed_op_hmul_pred_on.sum

flop_count_sp

smsp__sass_thread_inst_executed_op_fadd_pred_on.sum + smsp__sass_thread_inst_executed_op_fmul_pred_on.sum + smsp__sass_thread_inst_executed_op_ffma_pred_on.sum * 2

flop_count_sp_add

smsp__sass_thread_inst_executed_op_fadd_pred_on.sum

flop_count_sp_fma

smsp__sass_thread_inst_executed_op_ffma_pred_on.sum

flop_count_sp_mul

smsp__sass_thread_inst_executed_op_fmul_pred_on.sum

flop_count_sp_special

不适用

flop_dp_efficiency

smsp__sass_thread_inst_executed_ops_dadd_dmul_dfma_pred_on.avg.pct_of_peak_sustained_elapsed

flop_hp_efficiency

smsp__sass_thread_inst_executed_ops_hadd_hmul_hfma_pred_on.avg.pct_of_peak_sustained_elapsed

flop_sp_efficiency

smsp__sass_thread_inst_executed_ops_fadd_fmul_ffma_pred_on.avg.pct_of_peak_sustained_elapsed

gld_efficiency

smsp__sass_average_data_bytes_per_sector_mem_global_op_ld.pct

gld_requested_throughput

不适用

gld_throughput

l1tex__t_bytes_pipe_lsu_mem_global_op_ld.sum.per_second

gld_transactions

l1tex__t_sectors_pipe_lsu_mem_global_op_ld.sum

gld_transactions_per_request

l1tex__average_t_sectors_per_request_pipe_lsu_mem_global_op_ld.ratio

global_atomic_requests

l1tex__t_requests_pipe_lsu_mem_global_op_atom.sum

global_hit_rate

(l1tex__t_sectors_pipe_lsu_mem_global_op_ld_lookup_hit.sum + l1tex__t_sectors_pipe_lsu_mem_global_op_st_lookup_hit.sum + l1tex__t_sectors_pipe_lsu_mem_global_op_red_lookup_hit.sum + l1tex__t_sectors_pipe_lsu_mem_global_op_atom_lookup_hit.sum) / (l1tex__t_sectors_pipe_lsu_mem_global_op_ld.sum + l1tex__t_sectors_pipe_lsu_mem_global_op_st.sum + l1tex__t_sectors_pipe_lsu_mem_global_op_red.sum + l1tex__t_sectors_pipe_lsu_mem_global_op_atom.sum)

global_load_requests

l1tex__t_requests_pipe_lsu_mem_global_op_ld.sum

global_reduction_requests

l1tex__t_requests_pipe_lsu_mem_global_op_red.sum

global_store_requests

l1tex__t_requests_pipe_lsu_mem_global_op_st.sum

gst_efficiency

smsp__sass_average_data_bytes_per_sector_mem_global_op_st.pct

gst_requested_throughput

不适用

gst_throughput

l1tex__t_bytes_pipe_lsu_mem_global_op_st.sum.per_second

gst_transactions

l1tex__t_sectors_pipe_lsu_mem_global_op_st.sum

gst_transactions_per_request

l1tex__average_t_sectors_per_request_pipe_lsu_mem_global_op_st.ratio

half_precision_fu_utilization

smsp__inst_executed_pipe_fp16.avg.pct_of_peak_sustained_active

inst_bit_convert

smsp__sass_thread_inst_executed_op_conversion_pred_on.sum

inst_compute_ld_st

smsp__sass_thread_inst_executed_op_memory_pred_on.sum

inst_control

smsp__sass_thread_inst_executed_op_control_pred_on.sum

inst_executed

smsp__inst_executed.sum

inst_executed_global_atomics

smsp__sass_inst_executed_op_global_atom.sum

inst_executed_global_loads

smsp__inst_executed_op_global_ld.sum

inst_executed_global_reductions

smsp__inst_executed_op_global_red.sum

inst_executed_global_stores

smsp__inst_executed_op_global_st.sum

inst_executed_local_loads

smsp__inst_executed_op_local_ld.sum

inst_executed_local_stores

smsp__inst_executed_op_local_st.sum

inst_executed_shared_atomics

smsp__inst_executed_op_shared_atom.sum + smsp__inst_executed_op_shared_atom_dot_alu.sum + smsp__inst_executed_op_shared_atom_dot_cas.sum

inst_executed_shared_loads

smsp__inst_executed_op_shared_ld.sum

inst_executed_shared_stores

smsp__inst_executed_op_shared_st.sum

inst_executed_surface_atomics

smsp__inst_executed_op_surface_atom.sum

inst_executed_surface_loads

smsp__inst_executed_op_surface_ld.sum + smsp__inst_executed_op_shared_atom_dot_alu.sum + smsp__inst_executed_op_shared_atom_dot_cas.sum

inst_executed_surface_reductions

smsp__inst_executed_op_surface_red.sum

inst_executed_surface_stores

smsp__inst_executed_op_surface_st.sum

inst_executed_tex_ops

smsp__inst_executed_op_texture.sum

inst_fp_16

smsp__sass_thread_inst_executed_op_fp16_pred_on.sum

inst_fp_32

smsp__sass_thread_inst_executed_op_fp32_pred_on.sum

inst_fp_64

smsp__sass_thread_inst_executed_op_fp64_pred_on.sum

inst_integer

smsp__sass_thread_inst_executed_op_integer_pred_on.sum

inst_inter_thread_communication

smsp__sass_thread_inst_executed_op_inter_thread_communication_pred_on.sum

inst_issued

smsp__inst_issued.sum

inst_misc

smsp__sass_thread_inst_executed_op_misc_pred_on.sum

inst_per_warp

smsp__average_inst_executed_per_warp.ratio

inst_replay_overhead

不适用

ipc

smsp__inst_executed.avg.per_cycle_active

issue_slot_utilization

smsp__issue_active.avg.pct_of_peak_sustained_active

issue_slots

smsp__inst_issued.sum

issued_ipc

smsp__inst_issued.avg.per_cycle_active

l2_atomic_throughput

2 * ( lts__t_sectors_op_atom.sum.per_second + lts__t_sectors_op_red.sum.per_second )

l2_atomic_transactions

2 * ( lts__t_sectors_op_atom.sum + lts__t_sectors_op_red.sum )

l2_global_atomic_store_bytes

lts__t_bytes_equiv_l1sectormiss_pipe_lsu_mem_global_op_atom.sum

l2_global_load_bytes

lts__t_bytes_equiv_l1sectormiss_pipe_lsu_mem_global_op_ld.sum

l2_local_global_store_bytes

lts__t_bytes_equiv_l1sectormiss_pipe_lsu_mem_local_op_st.sum + lts__t_bytes_equiv_l1sectormiss_pipe_lsu_mem_global_op_st.sum

l2_local_load_bytes

lts__t_bytes_equiv_l1sectormiss_pipe_lsu_mem_local_op_ld.sum

l2_read_throughput

lts__t_sectors_op_read.sum.per_second + lts__t_sectors_op_atom.sum.per_second + lts__t_sectors_op_red.sum.per_second 2

l2_read_transactions

lts__t_sectors_op_read.sum + lts__t_sectors_op_atom.sum + lts__t_sectors_op_red.sum 2

l2_surface_load_bytes

lts__t_bytes_equiv_l1sectormiss_pipe_tex_mem_surface_op_ld.sum

l2_surface_store_bytes

lts__t_bytes_equiv_l1sectormiss_pipe_tex_mem_surface_op_st.sum

l2_tex_hit_rate

lts__t_sector_hit_rate.pct

l2_tex_read_hit_rate

lts__t_sector_op_read_hit_rate.pct

l2_tex_read_throughput

lts__t_sectors_srcunit_tex_op_read.sum.per_second

l2_tex_read_transactions

lts__t_sectors_srcunit_tex_op_read.sum

l2_tex_write_hit_rate

lts__t_sector_op_write_hit_rate.pct

l2_tex_write_throughput

lts__t_sectors_srcunit_tex_op_write.sum.per_second

l2_tex_write_transactions

lts__t_sectors_srcunit_tex_op_write.sum

l2_utilization

lts__t_sectors.avg.pct_of_peak_sustained_elapsed

l2_write_throughput

lts__t_sectors_op_write.sum.per_second + lts__t_sectors_op_atom.sum.per_second + lts__t_sectors_op_red.sum.per_second

l2_write_transactions

lts__t_sectors_op_write.sum + lts__t_sectors_op_atom.sum + lts__t_sectors_op_red.sum

ldst_executed

不适用

ldst_fu_utilization

smsp__inst_executed_pipe_lsu.avg.pct_of_peak_sustained_active

ldst_issued

不适用

local_hit_rate

不适用

local_load_requests

l1tex__t_requests_pipe_lsu_mem_local_op_ld.sum

local_load_throughput

l1tex__t_bytes_pipe_lsu_mem_local_op_ld.sum.per_second

local_load_transactions

l1tex__t_sectors_pipe_lsu_mem_local_op_ld.sum

local_load_transactions_per_request

l1tex__average_t_sectors_per_request_pipe_lsu_mem_local_op_ld.ratio

local_memory_overhead

不适用

local_store_requests

l1tex__t_requests_pipe_lsu_mem_local_op_st.sum

local_store_throughput

l1tex__t_sectors_pipe_lsu_mem_local_op_st.sum.per_second

local_store_transactions

l1tex__t_sectors_pipe_lsu_mem_local_op_st.sum

local_store_transactions_per_request

l1tex__average_t_sectors_per_request_pipe_lsu_mem_local_op_st.ratio

nvlink_data_receive_efficiency

不适用

nvlink_data_transmission_efficiency

不适用

nvlink_overhead_data_received

(nvlrx__bytes_data_protocol.sum / nvlrx__bytes.sum) * 100

nvlink_overhead_data_transmitted

(nvltx__bytes_data_protocol.sum / nvltx__bytes.sum) * 100

nvlink_receive_throughput

nvlrx__bytes.sum.per_second

nvlink_total_data_received

nvlrx__bytes.sum

nvlink_total_data_transmitted

nvltx__bytes.sum

nvlink_total_nratom_data_transmitted

不适用

nvlink_total_ratom_data_transmitted

不适用

nvlink_total_response_data_received

不适用

nvlink_total_write_data_transmitted

不适用

nvlink_transmit_throughput

nvltx__bytes.sum.per_second

nvlink_user_data_received

nvlrx__bytes_data_user.sum

nvlink_user_data_transmitted

nvltx__bytes_data_user.sum

nvlink_user_nratom_data_transmitted

不适用

nvlink_user_ratom_data_transmitted

不适用

nvlink_user_response_data_received

不适用

nvlink_user_write_data_transmitted

不适用

pcie_total_data_received

pcie__read_bytes.sum

pcie_total_data_transmitted

pcie__write_bytes.sum

shared_efficiency

smsp__sass_average_data_bytes_per_wavefront_mem_shared.pct

shared_load_throughput

l1tex__data_pipe_lsu_wavefronts_mem_shared_op_ld.sum.per_second

shared_load_transactions

l1tex__data_pipe_lsu_wavefronts_mem_shared_op_ld.sum

shared_load_transactions_per_request

不适用

shared_store_throughput

l1tex__data_pipe_lsu_wavefronts_mem_shared_op_st.sum.per_second

shared_store_transactions

l1tex__data_pipe_lsu_wavefronts_mem_shared_op_st.sum

shared_store_transactions_per_request

不适用

shared_utilization

l1tex__data_pipe_lsu_wavefronts_mem_shared.avg.pct_of_peak_sustained_elapsed

single_precision_fu_utilization

smsp__pipe_fma_cycles_active.avg.pct_of_peak_sustained_active

sm_efficiency

smsp__cycles_active.avg.pct_of_peak_sustained_elapsed

sm_tex_utilization

l1tex__texin_sm2tex_req_cycles_active.avg.pct_of_peak_sustained_elapsed

special_fu_utilization

smsp__inst_executed_pipe_xu.avg.pct_of_peak_sustained_active

stall_constant_memory_dependency

smsp__warp_issue_stalled_imc_miss_per_warp_active.pct

stall_exec_dependency

smsp__warp_issue_stalled_short_scoreboard_per_warp_active.pct + smsp__warp_issue_stalled_wait_per_warp_active.pct

stall_inst_fetch

smsp__warp_issue_stalled_no_instruction_per_warp_active.pct

stall_memory_dependency

smsp__warp_issue_stalled_long_scoreboard_per_warp_active.pct

stall_memory_throttle

smsp__warp_issue_stalled_drain_per_warp_active.pct + smsp__warp_issue_stalled_lg_throttle_per_warp_active.pct

stall_not_selected

smsp__warp_issue_stalled_not_selected_per_warp_active.pct

stall_other

smsp__warp_issue_stalled_dispatch_stall_per_warp_active.pct + smsp__warp_issue_stalled_misc_per_warp_active.pct

stall_pipe_busy

smsp__warp_issue_stalled_math_pipe_throttle_per_warp_active.pct + smsp__warp_issue_stalled_mio_throttle_per_warp_active.pct

stall_sleeping

smsp__warp_issue_stalled_sleeping_per_warp_active.pct

stall_sync

smsp__warp_issue_stalled_barrier_per_warp_active.pct + smsp__warp_issue_stalled_membar_per_warp_active.pct

stall_texture

smsp__warp_issue_stalled_tex_throttle_per_warp_active.pct

surface_atomic_requests

l1tex__t_requests_pipe_tex_mem_surface_op_atom.sum

surface_load_requests

l1tex__t_requests_pipe_tex_mem_surface_op_ld.sum

surface_reduction_requests

l1tex__t_requests_pipe_tex_mem_surface_op_red.sum

surface_store_requests

l1tex__t_requests_pipe_tex_mem_surface_op_st.sum

sysmem_read_bytes

lts__t_sectors_aperture_sysmem_op_read * 32

sysmem_read_throughput

lts__t_sectors_aperture_sysmem_op_read.sum.per_second

sysmem_read_transactions

lts__t_sectors_aperture_sysmem_op_read.sum

sysmem_read_utilization

不适用

sysmem_utilization

不适用

sysmem_write_bytes

lts__t_sectors_aperture_sysmem_op_write * 32

sysmem_write_throughput

lts__t_sectors_aperture_sysmem_op_write.sum.per_second

sysmem_write_transactions

lts__t_sectors_aperture_sysmem_op_write.sum

sysmem_write_utilization

不适用

tensor_precision_fu_utilization

sm__pipe_tensor_op_hmma_cycles_active.avg.pct_of_peak_sustained_active

tensor_precision_int_utilization

sm__pipe_tensor_op_imma_cycles_active.avg.pct_of_peak_sustained_active (SM 7.2+)

tex_cache_hit_rate

l1tex__t_sector_hit_rate.pct

tex_cache_throughput

不适用

tex_cache_transactions

l1tex__lsu_writeback_active.avg.pct_of_peak_sustained_active + l1tex__tex_writeback_active.avg.pct_of_peak_sustained_active

tex_fu_utilization

smsp__inst_executed_pipe_tex.avg.pct_of_peak_sustained_active

tex_sm_tex_utilization

l1tex__f_tex2sm_cycles_active.avg.pct_of_peak_sustained_elapsed

tex_sm_utilization

sm__mio2rf_writeback_active.avg.pct_of_peak_sustained_elapsed

tex_utilization

不适用

texture_load_requests

l1tex__t_requests_pipe_tex_mem_texture.sum

warp_execution_efficiency

smsp__thread_inst_executed_per_inst_executed.ratio

warp_nonpred_execution_efficiency

smsp__thread_inst_executed_per_inst_executed.pct

2(1,2)

Sector reads from reductions are added here only for compatibility to the current definition of the metric in nvprof. Reductions do not cause data to be communicated from L2 back to L1.

4.6.4. 事件比较

对于 nvprof 事件,下表列出了 NVIDIA Nsight Compute 中的等效指标(如果可用)。有关 PerfWorks 指标结构的详细说明,请参阅 指标结构

sm__ 开头的指标是按 SM 收集的。以 smsp__ 开头的指标是按 SM 子分区收集的。但是,所有相应的 nvprof 事件仅按 SM 收集。有关这些术语的更多详细信息,请查看 指标指南

表 12. 从 CUPTI 事件到 PerfWorks 指标的事件映射表,适用于计算能力 >= 7.0

nvprof 事件

PerfWorks 指标或公式 (>= SM 7.0)

active_cycles

sm__cycles_active.sum

active_cycles_pm

sm__cycles_active.sum

active_cycles_sys

sys__cycles_active.sum

active_warps

sm__warps_active.sum

active_warps_pm

sm__warps_active.sum

atom_count

smsp__inst_executed_op_generic_atom_dot_alu.sum

elapsed_cycles_pm

sm__cycles_elapsed.sum

elapsed_cycles_sm

sm__cycles_elapsed.sum

elapsed_cycles_sys

sys__cycles_elapsed.sum

fb_subp0_read_sectors

dram__sectors_read.sum

fb_subp1_read_sectors

dram__sectors_read.sum

fb_subp0_write_sectors

dram__sectors_write.sum

fb_subp1_write_sectors

dram__sectors_write.sum

global_atom_cas

smsp__inst_executed_op_generic_atom_dot_cas.sum

gred_count

smsp__inst_executed_op_global_red.sum

inst_executed

sm__inst_executed.sum

inst_executed_fma_pipe_s0

smsp__inst_executed_pipe_fma.sum

inst_executed_fma_pipe_s1

smsp__inst_executed_pipe_fma.sum

inst_executed_fma_pipe_s2

smsp__inst_executed_pipe_fma.sum

inst_executed_fma_pipe_s3

smsp__inst_executed_pipe_fma.sum

inst_executed_fp16_pipe_s0

smsp__inst_executed_pipe_fp16.sum

inst_executed_fp16_pipe_s1

smsp__inst_executed_pipe_fp16.sum

inst_executed_fp16_pipe_s2

smsp__inst_executed_pipe_fp16.sum

inst_executed_fp16_pipe_s3

smsp__inst_executed_pipe_fp16.sum

inst_executed_fp64_pipe_s0

smsp__inst_executed_pipe_fp64.sum

inst_executed_fp64_pipe_s1

smsp__inst_executed_pipe_fp64.sum

inst_executed_fp64_pipe_s2

smsp__inst_executed_pipe_fp64.sum

inst_executed_fp64_pipe_s3

smsp__inst_executed_pipe_fp64.sum

inst_issued1

sm__inst_issued.sum

l2_subp0_read_sector_misses

lts__t_sectors_op_read_lookup_miss.sum

l2_subp1_read_sector_misses

lts__t_sectors_op_read_lookup_miss.sum

l2_subp0_read_sysmem_sector_queries

lts__t_sectors_aperture_sysmem_op_read.sum

l2_subp1_read_sysmem_sector_queries

lts__t_sectors_aperture_sysmem_op_read.sum

l2_subp0_read_tex_hit_sectors

lts__t_sectors_srcunit_tex_op_read_lookup_hit.sum

l2_subp1_read_tex_hit_sectors

lts__t_sectors_srcunit_tex_op_read_lookup_hit.sum

l2_subp0_read_tex_sector_queries

lts__t_sectors_srcunit_tex_op_read.sum

l2_subp1_read_tex_sector_queries

lts__t_sectors_srcunit_tex_op_read.sum

l2_subp0_total_read_sector_queries

lts__t_sectors_op_read.sum + lts__t_sectors_op_atom.sum + lts__t_sectors_op_red.sum

l2_subp1_total_read_sector_queries

lts__t_sectors_op_read.sum + lts__t_sectors_op_atom.sum + lts__t_sectors_op_red.sum

l2_subp0_total_write_sector_queries

lts__t_sectors_op_write.sum + lts__t_sectors_op_atom.sum + lts__t_sectors_op_red.sum

l2_subp1_total_write_sector_queries

lts__t_sectors_op_write.sum + lts__t_sectors_op_atom.sum + lts__t_sectors_op_red.sum

l2_subp0_write_sector_misses

lts__t_sectors_op_write_lookup_miss.sum

l2_subp1_write_sector_misses

lts__t_sectors_op_write_lookup_miss.sum

l2_subp0_write_sysmem_sector_queries

lts__t_sectors_aperture_sysmem_op_write.sum

l2_subp1_write_sysmem_sector_queries

lts__t_sectors_aperture_sysmem_op_write.sum

l2_subp0_write_tex_hit_sectors

lts__t_sectors_srcunit_tex_op_write_lookup_hit.sum

l2_subp1_write_tex_hit_sectors

lts__t_sectors_srcunit_tex_op_write_lookup_hit.sum

l2_subp0_write_tex_sector_queries

lts__t_sectors_srcunit_tex_op_write.sum

l2_subp1_write_tex_sector_queries

lts__t_sectors_srcunit_tex_op_write.sum

not_predicated_off_thread_inst_executed

smsp__thread_inst_executed_pred_on.sum

pcie_rx_active_pulse

不适用

pcie_tx_active_pulse

不适用

prof_trigger_00

不适用

prof_trigger_01

不适用

prof_trigger_02

不适用

prof_trigger_03

不适用

prof_trigger_04

不适用

prof_trigger_05

不适用

prof_trigger_06

不适用

prof_trigger_07

不适用

inst_issued0

smsp__issue_inst0.sum

sm_cta_launched

sm__ctas_launched.sum

shared_load

smsp__inst_executed_op_shared_ld.sum

shared_store

smsp__inst_executed_op_shared_st.sum

generic_load

smsp__inst_executed_op_generic_ld.sum

generic_store

smsp__inst_executed_op_generic_st.sum

global_load

smsp__inst_executed_op_global_ld.sum

global_store

smsp__inst_executed_op_global_st.sum

local_load

smsp__inst_executed_op_local_ld.sum

local_store

smsp__inst_executed_op_local_st.sum

shared_atom

smsp__inst_executed_op_shared_atom.sum

shared_atom_cas

smsp__inst_executed_op_shared_atom_dot_cas.sum

shared_ld_bank_conflict

l1tex__data_bank_conflicts_pipe_lsu_mem_shared_op_ld.sum

shared_st_bank_conflict

l1tex__data_bank_conflicts_pipe_lsu_mem_shared_op_st.sum

shared_ld_transactions

l1tex__data_pipe_lsu_wavefronts_mem_shared_op_ld.sum

shared_st_transactions

l1tex__data_pipe_lsu_wavefronts_mem_shared_op_st.sum

tensor_pipe_active_cycles_s0

smsp__pipe_tensor_cycles_active.sum

tensor_pipe_active_cycles_s1

smsp__pipe_tensor_cycles_active.sum

tensor_pipe_active_cycles_s2

smsp__pipe_tensor_cycles_active.sum

tensor_pipe_active_cycles_s3

smsp__pipe_tensor_cycles_active.sum

thread_inst_executed

smsp__thread_inst_executed.sum

warps_launched

smsp__warps_launched.sum

4.6.5. 过滤

  • 按内核名称过滤

    nvprof 和 NVIDIA Nsight Compute CLI 都支持过滤应收集哪些内核的数据。在 nvprof 中,选项是 --kernels,并应用于后续的指标收集选项。在 NVIDIA Nsight Compute CLI 中,选项名为 --kernel-name,并应用于完整的应用程序执行。换句话说,除非内核在不同的 GPU 架构上执行,否则 NVIDIA Nsight Compute CLI 目前不支持为不同的内核收集不同的指标。

  • 按内核 ID 过滤

    Nvprof 允许用户使用内核 ID 描述来指定要分析的内核,使用的选项仍然是 --kernels。在 NVIDIA Nsight Compute CLI 中,此内核 ID 的语法是相同的,但选项名为 --kernel-id

  • 按设备过滤

    nvprof 和 NVIDIA Nsight Compute CLI 都使用 --devices 来过滤要分析的设备。与 nvprof 相比,在 NVIDIA Nsight Compute CLI 中,该选项全局应用,而不仅限于后续选项。

4.6.6. 输出

  • API 跟踪和摘要

    NVIDIA Nsight Compute CLI 不支持任何形式的 API 使用相关输出。在分析期间不捕获任何 API 数据。

  • 依赖性分析

    NVIDIA Nsight Compute CLI 不支持任何依赖性分析。在分析期间不捕获任何 API 数据。

  • GPU 跟踪

    NVIDIA Nsight Compute CLI 不支持任何 GPU 跟踪输出。由于在分析期间进行内核重放,内核执行是串行化的,并且开始和结束时间戳不一定与应用程序执行期间的时间戳匹配。此外,不记录内存活动的记录。

  • 打印摘要

    虽然 nvprof 有多个命令行选项来指定要打印哪些摘要信息,但 NVIDIA Nsight Compute CLI 使用 --print-summary 选项的更多参数。分析数据可以按 per-gpuper-kernelper-nvtx 上下文进行汇总。

  • 内核名称反混淆

    Nvprof 允许用户使用 --demangling 选项来决定是否启用名称反混淆。NVIDIA Nsight Compute CLI 目前始终在输出中反混淆内核名称。此外,选项 --kernel-regex-base 可用于决定在过滤期间匹配内核名称时应使用哪种名称格式。

  • 页面

    Nvprof 没有输出页面的概念,所有数据都以列表或摘要形式显示。NVIDIA Nsight Compute CLI 使用页面来定义数据的结构和打印方式。这些页面对应于 GUI 版本中使用的报告页面。选项 --page 可用于选择要显示的页面,默认情况下选择 details 页面。所有页面还支持以 CSV 格式打印,以便于后处理,使用 --csv 选项。

4.6.7. 启动和附加

  • 启动进程进行分析

    在 nvprof 中,要分析的应用程序作为命令行参数传递给工具。该应用程序必须是本地可执行文件。或者,您可以选择以守护进程模式使用该工具,并分析本地计算机上的所有适用进程(nvprof 选项 --profile-all-processes)。在 nvprof 中,通过 --profile-child-processes 标志来决定是分析完整的进程树还是仅分析根进程。在 NVIDIA Nsight Compute CLI 中,为此使用 --target-processes 选项。

    NVIDIA Nsight Compute CLI 有几种模式来确定要收集哪个应用程序的数据。默认情况下,通过命令行传递给工具的可执行文件将被启动、连接和分析。此模式称为 launch-and-attach(启动并附加)。

  • 启动进程以进行附加

    与 nvprof 相比,您可以选择仅启动本地可执行文件。在这种模式下(--mode launch),进程启动、连接,然后在第一次 CUDA API 调用时暂停。随后,还有第三种模式(--mode attach)用于附加到使用上述模式启动的任何进程。在这种情况下,所有分析和输出选项都将传递给 NVIDIA Nsight Compute CLI 的附加实例。

  • 远程分析

    最后,使用 launchattach,您可以连接到远程计算机上启动的进程,该计算机甚至可以运行与本地主机不同的操作系统。使用 --hostname 选择要连接的远程主机。

声明

声明

所有 NVIDIA 设计规范、参考板、文件、图纸、诊断程序、列表和其他文档(统称为“材料”,无论合并或单独)均“按原样”提供。NVIDIA 对这些材料不作任何明示、暗示、法定或其他方面的保证,并且明确声明不承担所有关于不侵权、适销性和特定用途适用性的默示保证。

所提供的信息据信是准确可靠的。但是,NVIDIA 公司对因使用此类信息而造成的后果,或因使用此类信息而可能导致的侵犯第三方专利或其他权利的行为不承担任何责任。在 NVIDIA 公司的任何专利权项下,未以暗示或其他方式授予任何许可。本出版物中提到的规格如有更改,恕不另行通知。本出版物取代并替换以前提供的所有其他信息。未经 NVIDIA 公司明确书面批准,NVIDIA 公司产品不得用作生命支持设备或系统中的关键组件。

商标

NVIDIA 和 NVIDIA 徽标是 NVIDIA 公司在美国和其他国家/地区的商标或注册商标。其他公司和产品名称可能是与其相关的各自公司的商标。