在 Nsight Compute 中解释计算工作负载分析

hea*_*low 4 cuda nsight-compute

计算工作负载分析显示不同计算管道的利用率。我知道在现代 GPU 中,整数和浮点管道是不同的硬件单元,可以并行执行。但是,对于其他管道,哪个管道代表哪个硬件单元并不是很清楚。我也找不到任何关于管道缩写和解释的在线文档。

我的问题是:

1)ADU、CBU、TEX、XU的全称是什么?它们如何映射到硬件?

2) 哪些流水线使用相同的硬件单元(例如 FP16、FMA、FP64 使用浮点单元)?

3)现代GPU中的warp调度器每个周期可以调度2条指令(使用不同的管道)。哪些流水线可以同时使用(例如 FMA-ALU、FMA-SFU、ALU-Tensor 等)?

Ps:我为那些不熟悉Nsight Compute的人添加截图。在此处输入图片说明

Gre*_*ith 8

Volta (CC 7.0) 和 Turing (CC 7.5) SM 由 4 个子分区 (SMSP) 组成。每个子分区包含

  • 扭曲调度程序
  • 注册文件
  • 立即常量缓存
  • 执行单位
    • ALU、FMA、FP16、UDP (7.5+) 和 XU
    • 以计算为中心的部件上的 FP64 (GV100)
    • 张量单位

包含其他几个分区,其中包含由 4 个子分区共享的执行单元和资源,包括

  • 指令缓存
  • 索引常量缓存
  • L1 数据缓存分为标记 RAM 和共享内存
  • 执行单位
    • ADU、路易斯安那州立大学、得克萨斯州
    • 在非计算部分 FP64 和 Tensor 可以实现为共享执行单元

在 Volta (CC7.0、7.2) 和 Turing (CC7.5) 中,每个 SM 子分区每个周期可以发出 1 条指令。该指令可以发送到本地执行单元或SM共享执行单元。

  • ADU - 地址发散单元。ADU 负责在指令转发到其他执行单元之前对分支/跳转和索引常量加载进行每个线程地址分歧处理。
  • ALU - 算术逻辑单元。ALU 负责执行大多数整数指令、位操作指令和逻辑指令。
  • CBU - 收敛屏障单元。CBU 负责屏障、收敛和分支指令。
  • FMA - 浮点乘法和累加单元。FMA 负责大多数 FP32 指令、整数乘法和累加指令以及整数点积。
  • FP16 - 成对半精度浮点单元。FP16 单元负责执行成对的半精度浮点指令。
  • FP64 - 双精度浮点单元。FP64 单元负责所有 FP64 指令。FP64 通常在 NVIDIA GPU 上实现为多个不同的管道。每个芯片的吞吐量差异很大。
  • LSU - 加载存储单元。LSU 负责对全局、本地和共享内存进行加载、存储和原子指令。
  • 张量 (FP16) - 半精度浮点矩阵乘法和累加单元。
  • 张量 (INT) - 整数矩阵乘法和累加单元。
  • TEX - 纹理单元。纹理单元负责纹理和表面上的采样、加载和过滤指令。
  • UDP(统一)- 统一数据路径 - 用于执行指令的标量单元,其中扭曲中的所有线程的输入和输出都相同。
  • XU - 超越和数据类型转换单元 - XU 负责特殊函数,例如 sin、cos 和倒数平方根以及数据类型转换。