2016-07-22 115 views
-2

我正在CUDA中編寫一個函數,該函數將三維網格中的未排序點集分開。基於點集的邊界,我可以找到每個點的座標並將其寫入網格單元格內的數組中。如何避免CUDA中不同塊的競爭條件

我使用線程數等於點數的方式啓動內核,方法是將它們分爲不同的塊以獲得最大線程數。

現在每個線程找到它的座標並在單元格中寫入點,但同一塊或不同塊中的其他線程也可以同時計算相同的座標。由於競爭條件,代碼在這裏失敗。

我讀了關於原子,鎖和關鍵部分,但這些同步僅在一個線程塊內使用,這在我的情況中不太可能。

有什麼建議嗎?

我最初的猜測是,我需要根據網格單元尺寸的距離的點進行排序,並啓動籽粒每一塊等於網格單元

回答

2

原子能公司可以在全球內存工作和塊之間同步的大小。這裏唯一的問題是性能。取決於執行寫入內存所佔用的運行時間的多少,您可能會得到比在CPU上串行執行代碼慢的代碼。原子學很慢。也許嘗試重新思考這個問題。