作者gaiger (hallowed be my name)
看板VideoCard
标题[问题] 几个CUDA的问题
时间Thu Nov 26 02:55:54 2009
※ [本文转录自 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
1F:→ gaiger:怪的是,若是n = 512,而numThread设成 64,又全正常 11/26 00:16
2F:→ gaiger:geForce 9600GT是 64核,所以是numThread最多只能设成64? 11/26 00:17
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 58.115.136.111
3F:推 dolphinus:numThread 最大应该只能设定到 512.. 11/26 08:50
4F:→ dolphinus:指 9600GT 的话. 11/26 08:50