我正在阅读Professional CUDA C Programming和GPU Architecture Overview部分:
CUDA 采用单指令多线程 (SIMT) 架构来管理和执行 32 个一组的线程,称为 warp。warp 中的所有线程同时执行相同的指令。每个线程都有自己的指令地址计数器和寄存器状态,对自己的数据执行当前指令。每个 SM 将分配给它的线程块划分为 32 线程 warp,然后调度这些线程在可用硬件资源上执行。
SIMT 架构类似于 SIMD(单指令多数据)架构。SIMD 和 SIMT 都通过将相同的指令广播到多个执行单元来实现并行性。一个关键的区别是 SIMD 要求一个向量中的所有向量元素在一个统一的同步组中一起执行,而 SIMT 允许同一个 warp 中的多个线程独立执行。即使一个 warp 中的所有线程一起从同一个程序地址开始,单个线程也可能具有不同的行为。SIMT 使您能够为独立的标量线程编写线程级并行代码,以及为协调线程编写数据并行代码。SIMT 模型包括 SIMD 没有的三个关键特性:
➤ 每个线程都有自己的指令地址计数器。
➤ 每个线程都有自己的寄存器状态。
➤ 每个线程可以有一个独立的执行路径。
第一段提到“ All threads in a warp execute the same instruction at the same time.
”,而在第二段中,它说“ Even though all threads in a warp start together at the same program address, it is possible for individual threads to have different behavior.
”。这让我很困惑,上面的陈述似乎相互矛盾。谁能解释一下?