2013-08-24 58 views
1

我寫了一個CUDA內核,其中每個線程都更新了特定的內存地址(int大小)。有些線程可能想要同時更新這個地址。CUDA如何處理內存地址的多個更新?

CUDA如何處理此問題?操作是否變得原子化?這是否會以任何方式增加我的應用程序的延遲?如果是這樣,怎麼樣?

回答

6

該操作不會成爲原子,並且它基本上是未定義的行爲。當兩個或更多線程寫入同一位置時,其中一個值將最終位於該位置,但無法預測哪一個值。

如果你正在閱讀和寫作,比如增加一個變量,這可能會特別成問題。

CUDA提供了一組atomic operations來幫助。

您也可以使用其他編碼技術,例如並行減少來幫助在對同一位置進行多次更新時(例如查找最大值或最小值)。

如果您不關心更新的順序,那麼新的GPU不應該是性能問題,它會自動將寫入或讀取壓縮到全局內存或共享內存中的單個位置,但這也不是指定的行爲。

+0

謝謝!這正是我需要的! – rodms