流多处理器–SM

  • GPU并行性依靠流多处理器SM(Streaming multiprocessor)来完成
  • 一个GPU是由多个SM构成的,Fermi架构SM关键资源如下:
    • CUDA核心(CUDA Core)
    • 共享内存/L1缓存(shared memory/L1 cache)
    • 寄存器文件(RegisterFile)
    • 加载和存储单元(Load/Store Units)
    • 特殊函数单元(Special Function Unit)
    • Warps调度(Warps Scheduler)

  • GPU中每个SM都可以支持数百个线程并发执行。
    以线程块block为单位,向SM分配线程块,多个线程可被同时分配到一个可用的SM上。
    当一个线程块被分配好SM后,就不可以再分配到其他SM上了。
  • 网格中的所有线程块需要分配到SM上进行执行
  • 线程块内的所有线程分配到同一个SM中执行,但是每个SM上可以被分配多个线程块
  • 线程块分配到SM中后,会以32个线程为一组进行分割,每个组成为一个wrap

线程束

CUDA采用单指令多线程SIMT架构管理执行线程,每32个为一组,构成一个线程束。同一个线程块中相邻的32个线程构成一个线程束。
具体的说,一个线程块中第0到第31个线程属于第0个线程束,第32个到第63个线程属于第1个线程束,以此类推。

  • 每个线程束中只能包含同一个线程块中的线程
  • 每个线程束包含32个线程
  • 线程束是GPU硬件上真正做到了并行
  • 线程束数量=ceil(线程块中的线程数/32)