为什么cuda中的SM只执行一个扭曲?
我经常在一些CUDA材料中发现以下词语: “在任何时候,SM只执行一个扭曲” 在这里我不太明白,因为每个SM可以同时运行数百到数千个线程,为什么一个时间点只能执行一个warp,即32个线程为什么cuda中的SM只执行一个扭曲?,cuda,Cuda,我经常在一些CUDA材料中发现以下词语: “在任何时候,SM只执行一个扭曲” 在这里我不太明白,因为每个SM可以同时运行数百到数千个线程,为什么一个时间点只能执行一个warp,即32个线程 谢谢 不同代CUDA硬件的详细信息各不相同,但例如,在早期代中,每个SM有8个执行单元,每个执行单元执行4个线程(每个线程每4个周期执行一条指令)。因此,您可以得到4路SMT,它为每个SM提供32个并发线程 当然,每个GPU都有多个SMs,例如30,这意味着在任何给定时刻执行的30 x 32线程扭曲=960个
谢谢 不同代CUDA硬件的详细信息各不相同,但例如,在早期代中,每个SM有8个执行单元,每个执行单元执行4个线程(每个线程每4个周期执行一条指令)。因此,您可以得到4路SMT,它为每个SM提供32个并发线程
当然,每个GPU都有多个SMs,例如30,这意味着在任何给定时刻执行的30 x 32线程扭曲=960个线程。除此之外,还可以对扭曲进行切换,因此您可以拥有更多的线程,例如960个“活动”线程,即使在任何给定的时间只有960个线程在实际执行。不同代的CUDA硬件的详细信息有所不同,但例如,在早期代中,每个SM有8个执行单元,每个执行单元执行4个线程(每个线程每4个周期发出一条指令)。因此,您可以得到4路SMT,每个SM提供32个并发线程
当然,每个GPU都有多条短消息,例如30条,这意味着在任何给定时刻执行的30 x 32线程扭曲=960个线程。除此之外,这些扭曲还可以进行切换,因此您可以拥有更多,例如960个“实时”线程,即使在任何给定的时间只有960个线程在实际执行。对于特斯拉体系结构来说,这是正确的,但对于费米和开普勒来说,这是不正确的。从扭曲调度程序的角度来看SM更容易。在每个周期,扭曲调度程序都会选择一个合格的扭曲(一个未停止的扭曲)并将一个或两个指令从warp发送到执行单元。费米和开普勒白皮书中记录了每个SM的执行单元数。CUDA内核大致相当于可以执行整数和单精度浮点运算的执行单元数。加载/存储操作还有其他执行单元配给、分支等 计算能力1.x(特斯拉)
- 每个SM 1个扭曲调度器
- 每个warp调度程序调度1条指令
- 每个SM有2个warp调度程序
- 每个warp调度程序调度1条指令
- 每个SM有2个warp调度程序
- 每个warp调度程序调度1或2条指令
- 每个SM 4个warp调度程序
- 每个warp调度程序调度1或2条指令
- 每个SM 1个扭曲调度器
- 每个warp调度程序调度1条指令
- 每个SM有2个warp调度程序
- 每个warp调度程序调度1条指令
- 每个SM有2个warp调度程序
- 每个warp调度程序调度1或2条指令
- 每个SM 4个warp调度程序
- 每个warp调度程序调度1或2条指令