4

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

我的问题是:

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

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

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

Ps:我为不熟悉Nsight Compute的人添加截图。在此处输入图像描述

4

1 回答 1

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 负责加载、存储和原子指令到全局、本地和共享内存。
  • Tensor (FP16) - 半精度浮点矩阵乘法和累加单元。
  • 张量 (INT) - 整数矩阵乘法和累加单元。
  • TEX - 纹理单元。纹理单元负责对纹理和表面的采样、加载和过滤指令。
  • UDP (Uniform) - Uniform Data Path - 一个标量单元,用于执行指令,其中输入和输出对于 warp 中的所有线程都是相同的。
  • XU - 超越和数据类型转换单元 - XU 负责特殊功能,例如 sin、cos 和倒数平方根以及数据类型转换。
于 2020-04-25T19:40:37.350 回答