NVIDIA Nsight Compute (NCU) 是用于分析 CUDA 程序性能的工具,通過 Sections 組織性能指標。用戶提供的 24 個 Sections 涵蓋了計算、內存、調度、互連和可視化等方面。本報告詳細解釋每個 Section 的含義、用途及相關分析場景。
Sections 詳細解析
C2CLink
含義:分析芯片到芯片 (Chip-to-Chip) 互連的性能,如 NVLink 或 PCIe 的帶寬和延遲。
用途:在多 GPU 系統(如 DGX)中,評估 GPU 間或 GPU-CPU 間的通信效率。
示例 Metrics:nvlink__bytes_tx(傳輸字節數)。
場景:優化多 GPU 數據傳輸,減少通信瓶頸。
ComputeWorkloadAnalysis
含義:分析 SM 的計算工作負載,包括指令吞吐量、浮點運算效率等。
用途:評估 GPU 計算資源的利用率,識別計算瓶頸。
示例 Metrics:sm__inst_executed(指令數)、flop_sp_efficiency(單精度浮點效率)。
場景:優化矩陣計算或科學計算內核。
InstructionStats
含義:統計 SASS(底層 Shader Assembly)指令的分布和執行情況。
用途:分析指令類型(如算術、內存操作)和執行頻率,定位低效指令。
示例 Metrics:sm__sass_inst_executed_op_fadd(浮點加法指令數)。
場景:優化指令級性能,減少冗余操作。
LaunchStats
含義:分析 CUDA 內核啟動參數,如網格大小、塊大小和寄存器使用量。
用途:評估線程塊分配和啟動配置是否合理。
示例 Metrics:launch__grid_size(網格大小)。
場景:調整線程塊配置以提高 SM 占用率。
MemoryWorkloadAnalysis
含義:分析內存工作負載,涵蓋全局、共享、紋理和本地內存訪問。
用途:識別內存訪問瓶頸,如緩存未命中或非合并訪問。
示例 Metrics:l1tex__t_sectors_pipe_lsu_mem_global_op_ld(全局內存加載扇區)。
場景:優化內存訪問模式,減少全局內存延遲。
MemoryWorkloadAnalysis_Chart
含義:為內存工作負載提供可視化圖表,如內存層次利用率或帶寬圖。
用途:輔助 MemoryWorkloadAnalysis,提供直觀內存性能分析。
示例 Metrics:與 MemoryWorkloadAnalysis 共享 Metrics,但格式為圖表。
場景:在 NCU GUI 中查看內存瓶頸的圖形化表示。
MemoryWorkloadAnalysis_Tables
含義:提供內存工作負載的詳細表格數據,補充 MemoryWorkloadAnalysis。
用途:提供結構化數據,便于深入分析內存訪問細節。
示例 Metrics:類似 l1tex__t_bytes_pipe_lsu_mem_global_op_ld(全局內存加載字節數)。
場景:導出表格數據進行腳本化分析。
NumaAffinity
含義:分析 NUMA(非均勻內存訪問)親和性,評估內存分配與 GPU/CPU 親和性。
用途:在多 GPU 或 CPU-GPU 系統中,優化內存分配以降低訪問延遲。
示例 Metrics:NUMA 相關的內存分配統計(具體 Metrics 因架構而異)。
場景:優化 DGX 或服務器環境中的內存親和性。
Nvlink
含義:分析 NVLink 互連的性能,測量多 GPU 間的帶寬和延遲。
用途:評估 GPU 間通信效率,定位 NVLink 瓶頸。
示例 Metrics:nvlink__bytes_tx(NVLink 傳輸字節數)。
場景:優化多 GPU 并行程序(如深度學習訓練)。
Nvlink_Tables
含義:提供 NVLink 性能的詳細表格數據,補充 Nvlink Section。
用途:為 NVLink 性能提供結構化數據,便于分析。
示例 Metrics:與 Nvlink 共享 Metrics,但以表格形式組織。
場景:導出 NVLink 數據進行離線分析。
Nvlink_Topology
含義:顯示 NVLink 拓撲結構,描述多 GPU 間的互連配置。
用途:幫助理解系統拓撲,優化 GPU 間數據傳輸路徑。
示例 Metrics:拓撲相關的元數據(非數值 Metrics)。
場景:規劃多 GPU 系統的數據分配。
Occupancy
含義:評估 SM 的占用率,即活躍 warp 數與最大 warp 數的比例。
用途:分析線程并行度,優化資源利用。
示例 Metrics:achieved_occupancy(實際占用率)。
場景:調整塊大小以提高 SM 占用率。
PmSampling
含義:通過性能監控 (Performance Monitoring) 采樣,收集硬件計數器數據。
用途:提供實時性能數據,分析硬件級行為。
示例 Metrics:sm__cycles_elapsed(SM 運行周期)。
場景:深入分析硬件性能瓶頸。
PmSampling_WarpStates
含義:分析 warp 狀態(如活躍、等待內存),基于性能監控采樣。
用途:診斷 warp 暫停原因,優化調度效率。
示例 Metrics:smsp__warp_issue_stalled_memory(因內存等待暫停的周期)。
場景:減少 warp 等待時間,提高執行效率。
SchedulerStats
含義:統計 warp 調度器行為,分析調度效率和暫停原因。
用途:定位調度瓶頸,如分支發散或資源競爭。
示例 Metrics:smsp__warp_issue_stalled(warp 暫停周期)。
場景:優化 warp 調度,減少分支發散。
SourceCounters
含義:將性能指標映射到源代碼行,分析代碼級性能。
用途:幫助開發者定位特定代碼行的性能瓶頸。
示例 Metrics:sm__inst_executed(按源代碼行統計)。
場景:優化特定 CUDA 內核代碼。
SpeedOfLight
含義:提供 SM 和內存利用率的概覽,快速識別主要瓶頸。
用途:作為性能分析的起點,判斷是計算還是內存受限。
示例 Metrics:sm_efficiency(SM 利用率)、dram__bytes(DRAM 字節數)。
場景:快速診斷程序性能瓶頸。
SpeedOfLight_HierarchicalDoubleRooflineChart
含義:顯示雙精度浮點運算的 Roofline 圖表,分析計算與內存性能平衡。
用途:評估雙精度計算是否受內存或計算限制。
示例 Metrics:flop_dp_efficiency(雙精度浮點效率)。
場景:優化科學計算程序。
SpeedOfLight_HierarchicalHalfRooflineChart
含義:顯示半精度浮點運算的 Roofline 圖表,針對 AI 工作負載。
用途:評估半精度計算(如 FP16)的性能瓶頸。
示例 Metrics:flop_hp_efficiency(半精度浮點效率)。
場景:優化深度學習模型。
SpeedOfLight_HierarchicalSingleRooflineChart
含義:顯示單精度浮點運算的 Roofline 圖表,分析通用計算性能。
用途:評估單精度計算(如 FP32)的性能瓶頸。
示例 Metrics:flop_sp_efficiency(單精度浮點效率)。
場景:優化圖形渲染或通用計算。
SpeedOfLight_HierarchicalTensorRooflineChart
含義:顯示 Tensor 核心運算的 Roofline 圖表,針對機器學習任務。
用途:評估 Tensor 核心(如 Volta、Ampere 架構)的性能。
示例 Metrics:tensor__throughput(Tensor 核心吞吐量)。
場景:優化深度學習訓練或推理。
SpeedOfLight_RooflineChart
含義:提供綜合 Roofline 圖表,比較計算與內存性能。
用途:綜合分析程序的計算和內存限制。
示例 Metrics:結合多種浮點運算和內存帶寬指標。
場景:全面評估程序性能。
WarpStateStats
含義:詳細統計 warp 狀態(如等待內存、分支發散、活躍)。
用途:分析線程執行效率,定位 warp 級瓶頸。
示例 Metrics:smsp__warp_issue_stalled_branch(因分支發散暫停的周期)。
場景:優化線程同步和分支邏輯。
WorkloadDistribution
含義:分析工作負載在 SM 間的分布,評估負載均衡性。
用途:確保所有 SM 均勻分配工作,最大化 GPU 利用率。
示例 Metrics:sm__inst_executed.avg.per_sm(每 SM 的平均指令數)。
場景:優化線程塊分配,平衡多 SM 負載。