Conditional Execution
Introduction
SIMD
- 由 Compiler 產生 vector instructions
- Programmer 會加上 decorator 告訴 Compiler 哪裡該平行化
- Compiler 也會自己分析哪些 instruction 沒有平行化然後將其包成 vector instruction
- 很難處理有
if else的程式碼 - 這個 vector instruction 會被傳給一組特別用來處理向量運算的 execution unit 來執行
SIMT
- 這是在 GPU 中的一種特殊架構
- Compiler 只會產生 scalar instruction (和 vector instruction 相反,就是單純 single stream 的 instruction)
- Stream Processor (SM) 會將多個 cuda core 綁在一起跑,稱為一個 warp
- 跟 CPU 讓 compiler 編譯產生的 vector instruction 告訴 ALU 該怎麼執行平行運算不同,SIMT 是讓硬體來做此工作
- 硬體在取得 scalar instruction 後,會將這個指令廣播給每個 cuda core 讓他們做同一個工作
- 因為是用廣播 scalar instruction 而不是和 vector instruction 一樣是寫死的,所以硬體能決定是否只要將指令傳給部分的 cuda core,因此可以處理
if else
cuda core 其實就是一個 ALU,只是名字比較酷而已
SIMT Conditional Execution
- 遇到
if else先確定 true false - 讓 true 的 ALU 先執行,其他休息
- 讓 true 的 ALU 休息,換 false 的 ALU 執行 else 的部分
