[問題] 幾個CUDA的問題

看板VideoCard (顯卡板)作者 (hallowed be my name)時間16年前 (2009/11/26 02:55), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串1/1
※ [本文轉錄自 C_and_CPP 看板] 作者: gaiger (hallowed be my name) 看板: C_and_CPP 標題: [問題] 幾個CUDA的問題 時間: Thu Nov 26 00:13:17 2009 寫了個很蠢的程式去練習 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

11/26 00:16,
怪的是,若是n = 512,而numThread設成 64,又全正常
11/26 00:16

11/26 00:17,
geForce 9600GT是 64核,所以是numThread最多只能設成64?
11/26 00:17
-- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 58.115.136.111

11/26 08:50, , 1F
numThread 最大應該只能設定到 512..
11/26 08:50, 1F

11/26 08:50, , 2F
指 9600GT 的話.
11/26 08:50, 2F
文章代碼(AID): #1B3NsyDR (VideoCard)
文章代碼(AID): #1B3NsyDR (VideoCard)