2010-11-26 99 views
0

我讀到一個帶有8個SP的SM,一個warp中的每個線程在執行一條指令期間映射到8個SP中的每一個。因此,在32/8 = 4個時鐘週期中執行扭曲。CUDA扭曲發散和時鐘週期

如果是這樣,那麼假設我在代碼中有一個if-else語句。假設「then」和「else」分支指令每個需要一個時鐘週期才能完成。

如果發散發生,需要多少個時鐘週期才能完成if-else語句?它是2還是應該是2 x 4 = 8? (即在後者中,每個四分之一經線2個週期)

欣賞任何澄清!

回答

6

粒度爲4個時鐘週期 - 有4個指令階段,每個階段處理8個線程的相同指令(如果有條件/分支,可以選擇屏蔽),這就是32個線程執行一條指令的方式每4個時鐘週期。因此,對於你的例子中的分歧分支,一個分支至少有4個時鐘,另一個分支至少有4個時鐘。