2

我经常在一些 CUDA 材料中发现以下词语:

“在任何时候,只有一个经线被 SM 执行”。

这里我不太明白,既然每个SM可以同时运行成百上千个线程,为什么一个时间点只能执行一个warp,也就是32个线程?

谢谢!

4

2 回答 2

4

不同代的 CUDA 硬件的详细信息有所不同,但例如在前几代中,每个 SM 有 8 个执行单元,每个执行单元执行 4 个线程(每 4 个周期来自每个线程的一条指令)。因此,您获得 4 路 SMT,每个 SM 提供 32 个并发线程。

当然,每个 GPU 有多个 SM,例如 30 个,这意味着 30 x 32 线程扭曲 = 960 个线程在任何给定时刻执行。除此之外,warp 可以切换进出,因此您可以拥有比例如 960 个“活动”线程更多的线程,即使在任何给定时间实际上只有 960 个线程在执行。

于 2012-11-19T22:36:19.067 回答
3

这句话对于特斯拉架构是正确的,但对于费米和开普勒来说是不正确的。从 warp 调度器的角度来看 SM 更容易。在每个周期,warp 调度程序选择一个符合条件的 warp(一个未停止的 warp)并将一个或两个指令从该 warp 分派到执行单元。每个 SM 的执行单元数量记录在 Fermi 和 Kepler 白皮书中。CUDA 内核大致相当于可以执行整数和单精度浮点运算的执行单元的数量。还有用于加载/存储操作、分支等的附加执行单元。

计算能力 1.x (特斯拉)

  • 每个 SM 1 个 warp 调度程序
  • 每个 warp 调度器调度 1 条指令

计算能力 2.0(费米第一代)

  • 每个 SM 2 个 warp 调度程序
  • 每个 warp 调度器调度 1 条指令

计算能力 2.1(Fermi 第二代)

  • 每个 SM 2 个 warp 调度程序
  • 每个 warp 调度器调度 1 或 2 条指令

计算能力 3.x(开普勒)

  • 每个 SM 4 个 warp 调度程序
  • 每个 warp 调度器调度 1 或 2 条指令
于 2012-11-20T02:49:57.930 回答