Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
长时间的CUDA呼叫杀死司机_Cuda - Fatal编程技术网

长时间的CUDA呼叫杀死司机

长时间的CUDA呼叫杀死司机,cuda,Cuda,我的理解是,CUDA应该只用于计算范围广泛的代码,因为调用设置有很大的开销。然而,在我的例子中,每当内核调用超过大约2秒时,我就会从Windows任务栏收到一条消息,说明驱动程序崩溃并已恢复。我找到了两种方法来解决这个问题。1禁用注册表中某个地方的看门狗计时器,我不愿意这样做。2.将长调用拆分为短调用,这会带来a/m开销,而且我的CPU代码实际上运行得更快 代码本身非常简单,所以我不认为崩溃发生在代码中 extern "C" __global__ void add( double *x, dou

我的理解是,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;
   }
 }
}
extern“C”\uuu全局\uuuu无效添加(双*x,双*y,双*z,双*d,双*n){
size_t idx=blockIdx.x*blockDim.x+threadIdx.x;
if(idx

我假设我正在做一些非常愚蠢的事情,因为这是非常基本的设置,应该可以正常工作。

如果cuda设备是主显示设备,则cuda运行时受此windows特定驱动程序规则的约束。如果显示驱动程序在2秒钟内没有响应,它将重新启动,并且所有正在运行的内核都将被杀死。解决问题的唯一方法是分路通话或使用第二个显示卡进行可视化,这样第一个cuda设备将不受限制


当然,拆分会导致内核调用和同步的一些开销。

可以通过添加注册表项来修改超时值

HKEY\U LOCAL\U MACHINE\System\CurrentControlSet\Control\GraphicsDrivers

名称:TdrDelay
类型:REG_DWORD
值:以秒为单位的所需超时


请记住,如果内核以某种方式进入无限循环,屏幕将锁定直到达到超时,然后驱动程序将重置。

除了您自己回答的问题外,具体的问题是什么?^这也可能是重复的:它是如何重复的?我不想更改或禁用超时。我正试图找到一种发布商业应用程序的方法。到目前为止,我认为这个限制是一个非常严重的阻碍,以至于我们停止了这个方向的发展。