3
在CUDA內核,我具有類似於下面的代碼。我試圖計算每個線程一個分子,並在分塊上累積分子以計算分母,然後返回比率。然而,CUDA被設置爲任何值的塊計算NUMER由線程擁有最大threadIdx.x,而不是在塊穿過的所有線程計算的NUMER值的總和DENOM的價值。有誰知道發生了什麼事?CUDA共享存儲器陣列 - 古怪行爲
extern __shared__ float s_shared[];
float numer = //calculate numerator
s_shared[threadIdx.x] = numer;
s_shared[blockDim.x] += numer;
__syncthreads();
float denom = s_shared[blockDim.x];
float result = numer/denom;
「結果」應始終爲0和1之間,並應在整個塊總和爲1,而是它等於1.0每個線程,其中threadIdx.x爲最大,以及一些其他值並不侷限於到塊中其他線程的範圍。
爲了說明這一點,這裏的邏輯被稱爲簡化。在cuda sdk中有幾個這樣的例子。請參閱:cuda-sdk/C/src/reduction/reduction_kernel.cu – 2010-03-05 19:08:23