看板 C_and_CPP 關於我們 聯絡資訊
寫了個很蠢的程式去練習 CUDA,這裡是DFT: (compiler皆為 cuda 2.1) /*這程式用CPU製造 sin波*/ void GenerateDATA( int n, float *data, float freq) { float dt = 1.0/float(n -1); const float pi = 4.0*atan(1.0); for(int i = 0; i < n; i++) { data[i] = (float)sin(2*pi*freq*i*dt); }/*for */ } /*GenerateNumbers*/ /* 用 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.0*(float)atan(1.0); int k, j; float phase = (-1.0)*(2*pi/n); for(k = tid * size ; k< (tid + 1) * size ; k++) { outputRe[k] = 0.0; outputIm[k] = 0.0; for(j = 0; j< n ; j++){ outputRe[k] += input[j]*(float)cos(phase*j*k); outputIm[k] += input[j]*(float)sin(phase*j*k); }/*for j*/ }/*for i*/ }/*__global__ static void DFT */ 當然就用最傻瓜的方式呼叫 DFT, 我的numBlock設為 1, numThread設成與 array長度相同(即 n) : DFT<<< numBlock, numThread, 0>>>(numThread,DATA_SIZE,inputGPU, outputReGPU, outputImGPU ); 算出來把結果打印出來看 : 用Emu mode (CPU模擬) 與 GPU mode 答案不一樣,請問這是正常的嗎 我確認我的 son atan都有強轉為 float型態 還為何會不同哩QQ 若array長度為 512 或 5000,我在printf整個 array時,會出現 數字錯亂的情況(類似 Nan, inf 這種強行以 float方式printf出來的樣子) ,但在Emu mode又完全正常,答案也正確 請問有人有類似的狀況嗎? 我GPU是 Geforce 9600gt(有1G的顯存,不太可能 out of memory 。。) 煩請高手回答 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 58.115.136.111
gaiger:怪的是,若是n = 512,而numThread設成 64,又全正常 11/26 00:16
gaiger:geForce 9600GT是 64核,所以是numThread最多只能設成64? 11/26 00:17
gaiger:轉錄至看板 VideoCard 11/26 02:55