线程层次结构
本文聚焦层次结构、线程块设计、线程束概念、Occupancy 优化。
层次结构回顾
MUSA 采用三层线程层次结构:
网格
├── 线程块 0
│ ├── 线程 0
│ ├── 线程 1
│ └── ...
├── 线程块 1
│ ├── 线程 0
│ └── ...
└── 线程块 N
| 层级 | 说明 | 特点 |
|---|---|---|
| 线程 | 执行的最小单元 | 每个线程执行相同代码,处理不同数据 |
| 线程块 | 线程的集合 | 块内线程可同步、共享内存 |
| 网格 | 所有线程块的集合 | 一次内核函数启动的所有线程 |

为什么线程块之间不能同步? 线程块可被调度到 GPU 上的任意 MP 执行,执行顺序不确定。如果允许跨线程块同步,程序将依赖特定的执行顺序,导致无法在不同 GPU 之间移植。