2011-07-05 79 views
10

我有一個關於GPU中分支預測的問題。據我所知,在GPU中,他們用分支進行預測。GPU上的分支預測

例如我有一個這樣的代碼:

if (C) 
A 
else 
B 

所以如果A需要40個循環和B需要50個週期來完成執行,如果假定爲一個經紗,A和B都被執行,所以確實完成這個分支需要90個週期?或者它們與A和B重疊,即當A的某些指令被執行時,然後等待內存請求,然後執行B的一些指令,然後等待內存,等等。 謝謝

+10

對於那些試圖進一步編輯這個問題的人,請注意分支預測和分支預測是**不是同一件事...... – talonmies

+0

我在這裏找到了很好的描述:http:// www.yosefk.com/blog/simd-simt-smt-parallelism-in-nvidia-gpus.html –

回答

11

到目前爲止發佈的所有CUDA架構都像SIMD機器一樣運行。當一個warp內存在分支分歧時,兩個代碼路徑都由warp中的所有線程執行,並且不跟隨活動路徑的線程執行NOP的功能等價物(我想我記得有一個條件執行標誌附加到每個線程中的warp,允許非執行線程被屏蔽掉)。

所以在你的例子中,90個循環的答案可能是比實際發生的事情更好的近似。

+0

我記得,在CUDA asm中有一個分支指令,但分支將被所有的warp線程佔用。 – osgx

+2

As ptx_isa.pdf:「如果warp的線程通過依賴數據的條件分支發散,warp會連續執行每條採用的分支路徑,禁用不在該路徑上的線程,並且當所有路徑完成時,線程收斂回相同的執行路徑「。所以,在PTX中有一個條件分支,但Warp的所有線程必須同時採用或不採用這個分支來統一(以獲得性能) – osgx

+0

感謝talonmies和osgx。所以在上面的例子中,執行代碼需要90個週期。但我想知道他們爲什麼不實施替代方案?我的意思是重疊A和B,因此吞吐量必須更高。在那種情況下,仍然以SIMD方式運行,但只是延遲可以更好地隱藏(通過執行分支的其他路徑)? – Zk1001