幾個CUDA的問題 - 顯卡

By Enid
at 2009-11-26T02:55
at 2009-11-26T02:55
Table of Contents
※ [本文轉錄自 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 。。)
煩請高手回答
--
作者: 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 。。)
煩請高手回答
--
Tags:
顯卡
All Comments

By Zanna
at 2009-11-26T12:17
at 2009-11-26T12:17

By Dora
at 2009-11-29T06:27
at 2009-11-29T06:27

By Mary
at 2009-12-03T22:16
at 2009-12-03T22:16
Related Posts
facebook在閃爍

By Daph Bay
at 2009-11-26T00:21
at 2009-11-26T00:21
MSI4850 無法安裝驅動程式

By Hazel
at 2009-11-25T22:28
at 2009-11-25T22:28
是獨顯壞掉了嗎?

By James
at 2009-11-25T20:21
at 2009-11-25T20:21
請問一下內顯有無驅動可刪 如何刪謝謝

By Wallis
at 2009-11-25T20:19
at 2009-11-25T20:19
請推薦顯示卡

By Mary
at 2009-11-25T18:17
at 2009-11-25T18:17