我讀Professional CUDA C Programming,並在GPU架構概述部分:如何理解「warp中的所有線程同時執行相同的指令。」在GPU中?
CUDA採用單指令多線程(SIMT)架構來管理並在32度經線叫組執行線程。 warp中的所有線程同時執行相同的指令。每個線程都有自己的指令地址計數器和寄存器狀態,並對其自己的數據執行當前指令。每個SM將分配給它的線程塊分成32線程的warp,然後在可用的硬件資源上調度執行。
SIMT架構與SIMD(單指令多數據)架構相似。 SIMD和SIMT都通過向多個執行單元廣播相同的指令來實現並行性。一個關鍵的區別是,SIMD要求矢量中的所有矢量元素都在一個單一的同步組中執行,而SIMT允許同一個warp中的多個線程獨立執行。即使一個warp中的所有線程都在同一個程序地址上一起啓動,單個線程也可能有不同的行爲。 SIMT使您能夠爲獨立的標量線程編寫線程級並行代碼,併爲協調線程編寫數據並行代碼。 SIMT模型包括SIMD不具備的三個關鍵特性:
➤每個線程都有自己的指令地址計數器。
➤每個線程都有自己的寄存器狀態。
➤每個線程都可以有一個獨立的執行路徑。
第一段提到「All threads in a warp execute the same instruction at the same time.
」,而在第二段中,它說「Even though all threads in a warp start together at the same program address, it is possible for individual threads to have different behavior.
」。這讓我感到困惑,上面的說法似乎是矛盾的。任何人都可以解釋它嗎?
我可以知道在這兩種情況下屏蔽的線程之間是否存在顯着差異?編程指南中說:「帶有假謂詞的指令不寫結果,也不評估地址或讀操作數」。這與NOP非常不同嗎?另外,對於第二種情況,我不確定哪些指示會在哪個階段重播。謝謝。 –