读GPU相关
操作数和操作符是如何在这个流水线中传递的呢?
六层流水线:取指,译码,发射,操作数传送,执行,回写
涉及的硬件单元:
前端:
- I-fetch:
- Instr-cache:
- Dcode:
- SIMT-stack: 管理控制流指令,管理PC
- SIMT中使用SIMT mask处理线程分支
线程分支会带来死锁,GPU用什么策略解决死锁问题?
为每一个thread提供PC指针
schedule optimizer决定哪些线程可以在一个warp内解决
- 线程分支回带来死锁问题,SIMT如何解决?
- scoreboard: 跟踪寄存器状态:是否被写入, 解析线程的独立性
- Instr-buffer:
- Odd warps scheuler:
- Even warps scheduler:
后端:
- 操作数块:
- arbiter:
- Memory块:
- 执行块:SM
- 回写
分别从operand和operator的角度解释六层流水线模型:
Operand:
Register bank/data cache/shared memory/global memory -> arbiter -> crossbar -> operand collector -> dispatch unit -> 执行阶段的memory单元和执行单元 -> register bank/data cache/ shared memory/global memory
Operator:
I-fetch块 -> I-cache -> decoder -> I-buffer -> warp scheduler -> dispatch unit -> SM