Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
C++ 当TDR启动时,长时间运行的cuda内核停止_C++_Loops_Cuda_Sleep - Fatal编程技术网

C++ 当TDR启动时,长时间运行的cuda内核停止

C++ 当TDR启动时,长时间运行的cuda内核停止,c++,loops,cuda,sleep,C++,Loops,Cuda,Sleep,我是CPGPU新手,我有一个小的。我的程序需要大量的计算,因此当达到限时,Windows TDR启动时,它会停止执行。 遗憾的是,我在运行我的程序的计算机上没有管理员权限,因此无法修改注册表项。我设法通过处理的图像行将问题分解为更小的问题,并尝试在for循环中重复调用内核。为了确保卡有时间响应操作系统,我在两次通话之间留出了一些睡眠时间,如下所示: for(int row = 0; row<image.y; row++){ printf("%d/%d\n", row, image.

我是CPGPU新手,我有一个小的。我的程序需要大量的计算,因此当达到限时,Windows TDR启动时,它会停止执行。 遗憾的是,我在运行我的程序的计算机上没有管理员权限,因此无法修改注册表项。我设法通过处理的图像行将问题分解为更小的问题,并尝试在for循环中重复调用内核。为了确保卡有时间响应操作系统,我在两次通话之间留出了一些睡眠时间,如下所示:

for(int row = 0; row<image.y; row++){
    printf("%d/%d\n", row, image.y);
    cudaMemset(dev_matrixes, 0, image.x*image.y*sizeof(short));
    countEnergyOfRow<<<B,BLOCK_DIM>>>(...);
    Sleep(750);
}

for(int row=0;row除了Windows TDR之外,Windows WDDM系统还受到批处理操作的影响。因此,一种可能是批处理操作的方式超过了超时,即使单个内核调用没有超过超时

您可以尝试的一件事是进一步减少内核的执行时间。如果内核的执行时间减少到1/10秒,那么即使是批处理操作也不会导致超时

您可以尝试的另一件事是在每次内核调用之后发出
cudaStreamQuery(0);
调用,尝试绕过批处理

您还可以检查第21次迭代是否由于某种原因花费了更长的时间;您可以添加
cudaEvent
计时来测量每个内核调用的时间;我相信这会很有启发性


最好的解决方案是在不受WDDM/TDR约束的系统/GPU上工作。

非常感谢!这确实是操作的批处理,使其运行时间过长。不幸的是,我无法收缩内核,但添加了cudaStreamQuery(0)在电话解决问题之前。更准确地说,我也在cudaMemset之前添加了它,因为它也很长,而且有时还会停止。现在它工作得完美无缺。