[問題] 關於CUDA的bank conflict

看板C_and_CPP (C/C++)作者 (藍丁丁)時間13年前 (2013/03/25 16:16), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/4 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) CUDA 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): Bank Conflict 餵入的資料(Input): sum[] array 預期的正確結果(Expected Output): sum array 的每個位置都能夠正確的被累加 錯誤結果(Wrong Output): 由於多個thread同時access到sum,會導致sum的值無法正確地被累加 程式碼(Code):(請善用置底文網頁, 記得排版) __global__ kernel_function() { int n = blockIdx.x * blockDim.x + threadIdx.x; int m= gridDim.x*blockDim.x; for( int i = threadIdx.x ; i < maxLine -1 ; i += blockDim.x ) { if( flag[i] == 1 ) { device_function_1( sum ); } else if( flag[i] == 2 ) { device_function_2( sum ); } } __device__ device_function_1( int sum[] ) { if(達成某些條件) sum[ 部分位置 ]++; } __device__ device_function_2( int sum[] ) { if(達成某些條件) sum[ 部分位置 ]++; } 補充說明(Supplement): 我的sum這個共用變數,是希望當成一個hash table的方式,讓所有資料執行的結果,存 在這個array中,所以會在device function都傳入這個變數,來把結果儲存起來。 此時會發生問題就是,所有的thread在進行運算時,都會對他做存取,導致結果的值會少 非常多。 以上,還請大家多多指教 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.247.160

03/25 19:12, , 1F
這不是 bank conflict 吧?
03/25 19:12, 1F
文章代碼(AID): #1HK0VCqC (C_and_CPP)
文章代碼(AID): #1HK0VCqC (C_and_CPP)