2012-08-01 120 views
1

我有一個內核,其中幾個線程將寫入同一個陣列位置,比方說位於全局內存中的array [i]。在這裏的其他相關問題給出了一個答案使用原子和其他東西。但沒有答案顯示實際的cuda代碼。任何人都可以顯示一個cuda代碼,array [i](即數組在索引i處的位置)是如何由多個線程以原子方式寫入的。謝謝!cuda:通過多個線程寫入相同的全局存儲器位置

回答

2

CUDA爲原子操作提供編譯器內在函數。有關每種計算功能可用的原子操作的更多詳細信息,請參見CUDA C編程指南。 計數器是一個指向大小爲gridDim.x的整數數組的指針。每個線程將增加由其blockIdx.x索引的數組值。

__global__ void CountThreadsInBlock(int* counters) 
{ 
    int i = blockIdx.x; 
    atomicAdd(&counters[i], 1); 
} 

// NOTE: Assume 1D launch.