为什么我的cuda程序一运行就黑屏

为什么我的cuda程序一运行就黑屏?

我的cuda程序有递归算法,而且只让它在第一个线程中执行,我总代码500多行。编译没问题。但是执行就会黑屏,过一会重新加载驱动,返回桌面。我想找出问题出在哪里,然后就用Nsight的“Start Cuda Debugging”,程序执行到最后也没有问题。请问是什么原因呢?会不会是我创建的变量太多了呢?但为什么Nsight的“Start Cuda Debugging”执行却不会报错呢?
部分程序如下:



__global__ static void ReceiveLeafE(Point3D * pcuCamPoint, int * pcuNumCamPoint, Point3D * pcuLeafPoint, int * pcuNumLeafPoint, float * pcuELeafCam)
{
   if (threadIdx.x == 0)
   {
   //================parameters==================//  
   float g_ellipseA = pow( 18.0f, 2.0f ); 
   float g_ellipseB = pow( 52.0f, 2.0f );
   float g_a = 0.014155f; // z = a*y^2
   float g_n = 1.33f;
   float g_sigma = 0.3f;
   float g_kL = 0.3f;
   .....下面还有很多代码。
   }
}

楼主您好,较新版本的nsight下运行,支持kernel preemption的。所以和常规运行下的效果不同。

您这个在正常情况下运行会导致超时的,
ICE可能如果没睡将稍候给出您如何取消时间限制,避免黑屏的方式。

LZ您好,请您禁用TDR或者将TDR的时间改长一些。

您可以在右下角的nsight monitor图标上点击右键——options
——general——Microsoft Display Driver 里面修改。

祝您好运~

谢谢版主,我已经键TDR禁用了,其实我的问题不是nsight 的问题。在nsight 的 “start cuda debugging”下是没有问题。问题是直接运行cuda程序的话出问题。

如“雷扫千军”所说:“较新版本的nsight下运行,支持kernel preemption的。所以和常规运行下的效果不同。您这个在正常情况下运行会导致超时的“。

可能我的问题是如何让我的程序能够允许超时。请问怎么解决这个问题呢?

楼主您好,您想要超时需要
(1)禁用TDR
(2)重新启动贵计算机。

一般100个人里面,禁用后依然超时的,都是没有重新启动。请您尝试重新启动下。

谢谢版主,如果版主知道怎么解决的话,能帮帮我吗?有空回复我就可以,很郁闷啊~~~

LZ您好:

1:nsight那里修改TDR是直接修改的您系统上的注册表信息,您修改了以后,您的系统上直接运行CUDA程序不会有时间限制了。

2:这个和您的程序无关的,不存在“让程序允许超时”。

3:请您在修改以后,重启系统一次,以便修改生效。

祝您好运~

LZ您好,请淡定,这是个小问题的,已经回复您具体做法。

祝您运行顺利~

谢谢帮主!原来要重启电脑啊!

您确定是帮主不是版主么?ICE制造苹果1000代中…

请立刻重启。谢谢。

日啖苹果三百颗,不辞长作白水人。

此地苹果甚好,欢迎大家购买品尝。

以及恭喜LZ解开 “TDR禁止,黑屏退散”成就~

祝您编码愉快~

哈哈,谢谢版主啦!

谢谢您的帮助!:smiley:

欢迎您常来论坛~:3_48: