我正試圖將幾個任務「映射」到CUDA GPU。有n個任務需要處理。 (看僞代碼)CUDA線程/線程塊之間的通信
malloc an boolean array flag[n] and initialize it as false.
for each work-group in parallel do
while there are still unfinished tasks do
Do something;
for a few j_1, j_2, .. j_m (j_i<k) do
Wait until task j_i is finished; [ while(flag[j_i]) ; ]
Do Something;
end for
Do something;
Mark task k finished; [ flag[k] = true; ]
end while
end for
由於某些原因,我將不得不使用不同線程塊中的線程。
問題是如何實現等到任務j_i完成;和標記任務k完成; CUDA中的。我的實現是使用布爾數組作爲標誌。然後在任務完成後設置標誌,並讀取標誌以檢查任務是否完成。
但它只適用於小案例,一個大案例,GPU崩潰的原因不明。有沒有更好的方法在CUDA中實現Wait和Mark。
這基本上是CUDA上的線程間通信問題。
你將不得不使用原子操作這..這花費了很多。 – angainor