2011-03-10 143 views
2

我正試圖在CUDA中編寫一個代碼,用於查找給定數字集的最大值 。在CUDA中查找最大值

假設你有20個數字,並且內核在5個線程的2個塊上運行。現在假設10個線程同時比較前10個值,並且線程2找到最大值,因此線程2正在更新全局內存中的最大值變量。當線程2正在更新時,剩餘的線程(1,3-10)將會使用舊值進行比較會發生什麼?

如果我使用atomicCAS()鎖定全局變量,那麼線程(1,3-10)會使用舊的最大值進行比較嗎?我怎樣才能克服這個問題?

回答

11

這是純粹的一個還原的問題。 NVIDIA爲了優化GPU的縮減,提供了一個很好的presentation。您可以使用相同的技術來查找所有元素的最小值,最大值或總和。

0

除非您正在嘗試編寫縮減內核,否則最簡單的方法就是使用CUBLAS

2

的鏈接,推力庫被打破。
如果有人發現它在這種情況下使用它是有用的,你可以在這裏找到文檔:
Thrust, extrema reductions