【发布时间】:2016-03-15 02:24:33
【问题描述】:
我的理解是 CUDA 应该只用于计算广泛的代码,因为调用设置有很大的开销。但是,在我的情况下,每当内核调用超过大约 2 秒左右时,我就会从 Windows 任务栏收到一条消息,说明驱动程序崩溃并已恢复。我找到了两种方法来解决这个问题。 1 在注册表中的某处禁用看门狗计时器,我不愿意这样做。 2.将长调用拆分成更短的调用,这会带来 a/m 开销,而我的 CPU 代码实际上运行得更快。
代码本身很简单,所以我不认为崩溃发生在代码中。
extern "C" __global__ void add( double *x, double *y, double *z, double *d, double * n ) {
size_t idx = blockIdx.x * blockDim.x + threadIdx.x;
if (idx < n[0])
{
double thisX = x[idx];
double thisY = y[idx];
double thisZ = z[idx];
//int i = tid;
for(int i = 0; i < n[0]; i++)
{
double distance = sqrt((thisX-x[i])*(thisX-x[i]) + (thisY-y[i])*(thisY-y[i]) + (thisZ-z[i])*(thisZ-z[i]));
d[idx] = distance;
}
}
}
我认为我正在做一些非常愚蠢的事情,因为它是非常基本的设置,应该可以正常工作。
【问题讨论】:
-
除了您自己回答的问题之外,具体的问题是什么?
-
^this,但也可能重复:stackoverflow.com/questions/17186638/…
-
怎么是重复的?我不想更改超时或禁用它。我正在尝试找出一种分发商业应用程序的方法。到目前为止,我认为这个限制是一个非常严重的阻碍,以至于我们停止了这个方向的开发。
标签: cuda