0
CUDA編程指南分爲以下的說:CUDA線程是否以O(n)操作的鎖步執行?
的經執行一次一個共同的指令,所以,當經紗的所有32個線程的執行路徑上同意達到最高效率。如果warp的線程通過依賴於數據的條件分支發散,則warp會連續執行所採用的每個分支路徑,禁用不在該路徑上的線程,並且當所有路徑完成時,線程會聚到相同的執行路徑。
我在想,因爲一個共同的指令在一個時間鎖步。
- 那麼在沒有分支並且每個線程需要計算O(n)操作的情況下會發生什麼?
- 如果他們操作的數據值較小,那麼warp中的某些線程是否會在其他線程之前完成?
- 如果某些線程在其他線程之前完成,它們保持空閒狀態,直到其他線程完成?
指南指的是O(1)(至少在理論上)的具體機器指令。您的O(n)操作由機器指令組成。爲了在其他人之前進行經紗整理,您需要爲他們提供不同的數據。這隻適用於一個分支(除非我在這裏錯了,而你有一個反例)。 – Drop
這正是我想要發現的;如果他們用不同的數據餵食,會在別人之前完成線程處理? – John
我的觀點是:你不能在沒有分支的情況下飼餵不同的東西(即(1)中的假設是錯誤的)。並且在分支的情況下,每條路徑長度相同並且被序列化。無論如何,線程同時完成。 – Drop