2016-06-08 194 views
0

我正在CUDA中實現並行壓縮。__threadfence意味着__syncthreads的效果?

內核有一個__syncthreads等待所有線程完成從共享內存中的2次讀取,然後將共享內存寫回總和。

我應該使用__threadfence_block來確保寫入共享內存對所有線程都可見,以便進行下一次迭代,或使用__syncthreads,如NVIDIA's example中給出的那樣?

回答

2

__syncthreads()也意味着存儲圍欄功能。之前__syncthreads

等待,直到在線程塊中的所有線程都達到此點和所有全局和共享存儲器訪問由通過這些線程()是塊中的所有線程可見:這是覆蓋在documentation 。因此,在這種情況下

它不會是必要的,除了使用__threadfence_block()__syncthreads()

你不能代替一個threadfence功能在平時一般平行減少執行障礙。除了內存屏蔽功能之外,還需要執行屏障(__syncthreads())。在一般情況下,通常需要等待所有線程執行給定輪次的縮減,然後再繼續下一輪; __threadfence_block()本身不會強制經紗等待,而其他經紗正在執行給定的一輪縮小。

因此通常需要__syncthreads(),並且假設您已經正確使用它,通常不需要__threadfence_block()

__syncthreads()意味着__threadfence_block()

__threadfence_block()並不意味着__syncthreads()