Re: [問題] 幾個CUDA的問題

看板C_and_CPP (C/C++)作者時間16年前 (2009/11/26 19:45), 編輯推噓2(208)
留言10則, 4人參與, 最新討論串2/4 (看更多)
修改了一下你的 function /*這程式用CPU製造 sin波*/ void GenerateDATA( int n, float *data, float freq ) { float dt = 1.0f / (n-1); const float pi = 4 * atanf(1.0f); for(int i = 0; i < n; i++) { data[i] = sinf(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 * 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 */ 這樣應該就能執行出接近正確的結果了吧 numThread最多只能設256 因為resource的問題 至於精確度...沒辦法 float差不多就只能這樣了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.75.239 ※ 編輯: lgen7604 來自: 140.114.75.239 (11/26 19:48)

11/26 19:58, , 1F
CUDA不是已經支援64bits浮點數了嗎?
11/26 19:58, 1F

11/26 20:05, , 2F
還要看硬體啊 9600GT的相容性是不能用double的
11/26 20:05, 2F

11/26 21:34, , 3F
謝謝legen7604大大,那請問 (float)atan(1.0)與 atanf(1.0)
11/26 21:34, 3F

11/26 21:34, , 4F
有什麼本值上的不同啊?
11/26 21:34, 4F

11/26 21:34, , 5F
不都是強轉double為 float嗎? QQ
11/26 21:34, 5F

11/26 21:49, , 6F
atanf(1.0f)的輸入,運算,回傳值都是float 而atan(1.0)的
11/26 21:49, 6F

11/26 21:49, , 7F
輸入,運算,回傳值都是double 只有在最後才將回傳值轉為
11/26 21:49, 7F

11/26 21:49, , 8F
float 精確度會比較高
11/26 21:49, 8F

11/27 02:25, , 9F
你其實可以用GetLastError看kernel有沒有成功
11/27 02:25, 9F

11/27 02:27, , 10F
另外GPU的memory不會全部給CUDA使用,桌面環境會挖掉一些
11/27 02:27, 10F
文章代碼(AID): #1B3cfGX6 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1B3cfGX6 (C_and_CPP)