6. cuda warp
-
在cuda中,线程块在单流多处理器上运行。
-
当设备内存足够时,多个block可以在同一个sm上运行。
-
SIMT(Single instruction multiple threads):
一个指令多个线程执行(cuda的本质) -
一个线程块不能再多个SM中执行。当一个SM中不能跑一个block的时候,(共享内存溢出时), 内核发射失败,函数将返回
cudaSucess
以外的值。 -
程序结构对应的硬件结构:
-
为什么要有warp?
-
理论上线程并行和实际上的并行是有稍微差异的
-
例如: 当 SM的数量为13,每个SM的核心数为128,那么总共可以并行的实际核心数量为 13 * 128 = 1664;
-
如我们给每个线程块分配512个线程,显然一个SM上是无法完全并行一个block的。
-
所以block被划分为更小的单元: warp
-