为什么只有一个经线由cuda中的SM执行?

时间:2012-11-19 22:27:27

标签: cuda

我经常在一些CUDA材料中找到以下词语:

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

这里我不太明白,因为每个SM可以同时运行数百到数千个线程,为什么只能在一个时间点执行一个32个线程的warp?

谢谢!

2 个答案:

答案 0 :(得分:4)

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

当然每个GPU有多个SM,例如30,这意味着30 x 32线程warp =在任何给定时刻执行960个线程。在这个经线之上可以切换进出,所以你可以拥有更多,例如, 960个“实时”线程,即使其中只有960个在任何给定时间实际执行。

答案 1 :(得分:3)

声明适用于特斯拉架构,但对于费米和开普勒而言则不正确。在warp调度程序方面更容易查看SM。在每个周期,warp调度程序选择一个符合条件的warp(一个未停止的warp),并从warp向执行单元发送一个或两个指令。 Fermi和Kepler白皮书中记录了每个SM的执行单元数。 CUDA核心大致等于可以执行整数和单精度浮点运算的执行单元的数量。还有其他执行单元用于加载/存储操作,分支等。

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

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

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

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

计算能力2.1 (费米第二代)

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

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

  • 每个SM 4个warp调度程序
  • 每个warp调度程序发送1或2条指令