這會導致共享內存不一致嗎?CUDA:來自不同經線但同一個塊的2個線程嘗試寫入相同的SHARED內存位置:危險?
我的內核的代碼看起來是這樣的(僞代碼):
__shared__ uint histogram[32][64];
uint threadLane = threadIdx.x % 32;
for (data){
histogram[threadLane][data]++;
}
這會不會導致碰撞,因爲,在具有64個線程的塊,ID爲 「x」 和「線程(X + 32) 「會經常寫入矩陣中的相同位置?
該程序計算給定矩陣的直方圖。我有一個相同的CPU程序。由GPU計算的直方圖一直比CPU計算的直方圖低1/128,我無法弄清楚原因。
您能否提供一些更詳細的信息,特別是關於'data'與threadIdx以及啓動配置有關的內容?編譯的東西會更好。 –