[問題] 幾個CUDA的問題
看板VideoCard (顯卡板)作者gaiger (hallowed be my name)時間16年前 (2009/11/26 02:55)推噓1(1推 0噓 1→)留言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,
11/26 00:16
→
11/26 00:17,
11/26 00:17
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 58.115.136.111
推
11/26 08:50, , 1F
11/26 08:50, 1F
→
11/26 08:50, , 2F
11/26 08:50, 2F
VideoCard 近期熱門文章
PTT數位生活區 即時熱門文章