[問題] 關於CUDA的bank conflict
開發平台(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
03/25 19:12, 1F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 4 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章