一、CUDA執行模型概述
二、線程束執行
1. 線程束與線程塊
線程束是SM中基本的執行單元。
當一個線程塊的網格被啟動后,網格中的線程塊分布在SM中。
一旦線程塊被調度到一個SM中,線程塊中的線程會被進一步劃分成線程束。
一個線程束由32個連續的線程組成,在一個線程束中,所有的線程按照單指令多線程方式執行。
所有線程都執行相同的指令,每個線程在私有數據上進行操作。
?從邏輯角度看,線程塊是線程的集合,可以被組織成一維、二維或三維布局。
從硬件角度看,線程塊是一維線程束的集合。在線程塊中線程被組織成一維布局,每32個連續線程組織成一個線程束。
2. 線程束分化?
GPU是相對簡單的設備,沒有復雜的分支預測機制。
一個線程束中的所有線程在同一周期中必須執行相同的指令,如果一個線程執行一條指令,那么線程束中的所有線程都必須執行該指令。
為了獲得最佳的性能,應該避免在同一個線程束中有不同的執行路徑,以確保同一個線程束中所有的線程在一個應用程序中使用同一個控制路徑。