CUDA執行模式

yyfn風辰發表於2010-03-01
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONETesla架構的構建以一個可伸縮的流多處理器(SM)陣列為中心。當主機 CPU上的CUDA 程式呼叫核心網格時,網格的塊將被列舉並分發到多處理器上。一個執行緒塊的執行緒在一個多處理器上併發執行。線上程塊終止時,排程單元將決定是否啟動新塊和啟動那一個塊。

為了管理執行各種不同程式的數百個執行緒,多處理器利用了一種稱為SIMT(單指令、多執行緒)的新架構。多處理器會將各執行緒對映到一個標量處理器核心,各標量執行緒使用自己的指令地址和暫存器狀態獨立執行。多處理器SIMT單元以warp為單位來建立、管理、排程和執行執行緒,構成warp的各個執行緒在同一個程式地址一起啟動,嚴格序列。

為一個多處理器指定了一個或多個要執行的執行緒塊時,它會將其分成warp塊,並由SIMT單元進行排程。將塊分割為warp的方法總是相同的,每個warp都包含連續的執行緒,遞增執行緒索引,第一個warp中包含全域性執行緒過索引0-31。每發出一條指令時,SIMT單元都會選擇一個已準備好執行的warp塊,並將指令傳送到該warp塊的活動執行緒。Warp塊每次執行一條通用指令,因此在warp塊的全部32個執行緒執行同一條路徑時,可達到最高效率。如果一個warp塊的執行緒通過獨立於資料的條件分支而分散,warp塊將連續執行所使用的各分支路徑,而禁用未在此路徑上的執行緒,完成所有路徑時,執行緒重新匯聚到同一執行路徑下,其執行時間為各時間總和。分支僅在warp塊內出現,不同的warp塊總是獨立執行的--無論它們執行的是通用的程式碼路徑還是彼此無關的程式碼路徑。

SIMT架構類似於SIMD(單指令流多資料流)向量組織方法,共同之處是使用單指令來控制多個處理元素。一項主要差別在於SIMD向量組織方法會向軟體公開 SIMD寬度,而SIMT指令指定單一執行緒的執行和分支行為。與SIMD向量機不同,SIMT允許程式設計師為獨立、標量執行緒編寫執行緒級的並行程式碼,還允許為協同執行緒編寫資料並行程式碼。為了確保正確性,程式設計師可忽略SIMT行為,但通過維護很少需要使一個warp塊內的執行緒分支的程式碼,即可實現顯著的效能提升。

另外一個重要不同是SIMD中的向量中的元素相互之間可以自由通訊,因為它們存在於相同的地址空間(例如,都在CPU的同一暫存器中),而SIMT中的每個執行緒的暫存器都是私有的,執行緒之間只能通過shared memory和同步機制進行通訊。

SIMT程式設計模型中如果需要控制單個執行緒的行為,必須使用分支,這會大大的降低效率。例如,如果一個warp中需要進行分支(即warp內的執行緒執行的指令指標指向不同的位置),效能將急劇的下降。如果一個warp內需要執行N個分支,那麼SM就需要把每一個分支的指令發射到每一個SP上,再由SP根據執行緒的邏輯決定需不需要執行。這是一個序列過程,因此SIMT完成分支的時間是多個分支時間之和。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23057064/viewspace-628302/,如需轉載,請註明出處,否則將追究法律責任。

相關文章