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

  1. 遇到 if else 先確定 true false
  2. 讓 true 的 ALU 先執行,其他休息
  3. 讓 true 的 ALU 休息,換 false 的 ALU 執行 else 的部分