0

我在 C 中创建了一个程序并试图将其更改为 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 ......

所以如果我在任何这些功能中犯了错误,我就会徘徊。

提前致谢

4

1 回答 1

1

如果您正在尝试检查您的功能是否正常工作,请尝试使用__host__指令,以便在主机上也可以使用相同的功能,然后您可以在本地测试和调试它。如果它在主机上工作而在设备上不起作用,则在将信息从主机复制到设备并返回时,您可能做错了。

像这样声明你的函数:

__host__ __device__ void nextState(int i, darray oldv, darray newv, darray w, int t)
于 2016-04-30T01:43:02.103 回答