2012-11-28 27 views
0

我已經在C中創建了一個程序,並試圖將其更改爲CUDA。Cuda中的算法

程序輸出帶圖形編號的文件。

與CUDA,我可以得到程序輸出的文件,但計算還沒有完成

這裏的代碼與算法

__device__ void nextState(int i, darray oldv, darray newv, darray w, int t){ 

double dv; 

    dv = -8*oldv[i]*(oldv[i]-0.1)*(oldv[i]-1) - oldv[i]*w[i]; 

/* Stimulate in leftmost region */ 
    if ((t >=10) && (t<=15) && (i < 4)) 
    dv += 2; 

/* diffusion */ 
    newv[i] = oldv[i] + 0.1 *dv + 
      0.1 *1.0*(oldv[i-1]-2*oldv[i]+oldv[i+1])/(1.0*1.0); 

    w[i] = w[i] + 0.1 *eps(oldv[i],w[i]) 
         *(-w[i]-8*oldv[i]*(oldv[i]-0.1-1)); 

} 

__device__ double eps(double u, double v) 
{ 
    return (0.002 + (0.2*v)/(u+0.3)); 
} 

__global__ void run_state(darray* oldv, darray* newv, darray* w, int* t) 
{ 
int i = threadIdx.x; 

nextState(i, *oldv, *newv, *w, *t); 

} 

#define N 256;run_state<<< 1, N>>>(d_oldv, d_newv, d_w, d_t); 所以應該輸出256個值。它這樣做,但所有都在0.000 ...

所以我漫遊,如果我在這些功能中的任何一個錯誤。

在此先感謝

+0

你在做錯誤檢查所有CUDA調用? (cudaMalloc,cudaMemcpy,內核調用等)數據很可能無法正確顯示到GPU,或者GPU甚至沒有運行您認爲的代碼。 –

+0

@Robert如果我放置的功能有任何問題,我就會徘徊,如果不是的話,我會認爲這將與你所說的有關。 – Tom

+0

我不明白爲什麼你需要將「指針指針」參數傳遞給你的內核?我的意思是d_oldv,d_newv和d_w。請注意,您無法取消引用設備上的主機指針 – 2012-11-29 10:14:19

回答

1

如果你嘗試檢查,如果你的功能是否正常工作嘗試使用__host__指令,所以同樣的功能,也可以在主機上使用,那麼你可以測試和本地調試。如果它在主機上工作並且不能在設備上工作,那麼在將信息從主機複製到設備時可能會出錯。

聲明你的功能是這樣的:

__host__ __device__ void nextState(int i, darray oldv, darray newv, darray w, int t)