看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《lgen7604 ()》之銘言: 我又有問題嚕,我把上次的DFT函數 : /* 用 GPU算 DFT的函數 */ : __global__ static void DFT( int numThread, int n, float *input, : float *outputRe, float *outputIm ) : { : const int tid = threadIdx.x; : const int size = n / numThread; : const float pi = 4 * atanf(1.0f); : int k, j; : float phase = (-1) * (2*pi/n); : for(k = tid * size; k < (tid + 1) * size; k++) { : outputRe[k] = 0.0f; : outputIm[k] = 0.0f; : for(j = 0; j< n; j++){ : outputRe[k] += input[j] * cosf(j*k*phase); : outputIm[k] += input[j] * sinf(j*k*phase); : }/*for j*/ : }/*for i*/ : }/*__global__ static void DFT */ ,為了利用到 block 改成這樣 : _global__ static void DFT(int n, float *input, float *outputRe, float *outputIm ) { int k, j; const float pi = 4.0*atanf(1.0f); float phase = (-1.0)*(2*pi/n); int tid = threadIdx.x ; int bdim = blockDim.x; int gdim = gridDim.x; for(k = bdim*gdim + tid; k< n; k += bdim*gdim){ outputRe[k] = 0.0f; outputIm[k] = 0.0f; for(j = 0; j< n ; j++){ outputRe[k] += input[j]*cosf(phase*j*k); outputIm[k] += input[j]*sinf(phase*j*k); }/*for j*/ }/*for k*/ }/*_global__ static void DFT*/ 外面呼叫他就是 DFT<<< numBlock, numThread>>>(n,inputGPU, outputReGPU, outputImGPU ); numThread 固定設成16 程式到這裡看似沒問題: 當numBlock = 1時 :答案正確 但是當 numBlock =2 或四時,答案就像亂數製造機一樣 會亂跳一通(特別是在array boundary跳特別利害) 我在想是不是我程式寫錯,但check半天 似乎也沒錯啊QQ 還請大牛幫忙 謝謝 PS : 我的 device 是用 GeForce 9600gt -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.70.178.67