我已经用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 ...
因此,如果我在这些功能中的任何一个操作有误,我都会在徘徊。
提前致谢
最佳答案
如果要检查功能是否正常运行,请尝试使用__host__
指令,以便同一功能也可以在主机上使用,然后可以在本地进行测试和调试。如果它可以在主机上运行而不能在设备上运行,则在将信息从主机复制到设备然后再复制回来时,您可能做错了。
像这样声明您的功能:
__host__ __device__ void nextState(int i, darray oldv, darray newv, darray w, int t)