cuda c编程

不懂,这个怎么改

是要改还是不要改

您的部分代码代码没有发现问题。考虑到您的错误提示是timeout, 存在如下可能:

您的kernel可能正巧在32位下能赶在超时前完成,却无法及时的在超时后完成(64位下的指针需要2个寄存器,访存指令变成.e后缀等), 从而可能导致您kernel的寄存器压力变大,从而正好无法及时完成。

建议您先取消TDR带来的超时,然后重新运行看看现象是否消失。

我将稍后为您告知如何取消超时。

好,谢谢

如何取消超时限制?方法如下:
安装nsight visual studio edition。点击开始菜单->运行nsight monitor->在右下角的nsight monitor图标上用鼠标的右键点击->在弹出的菜单上用鼠标的左键点击options->在Microsoft Display Driver的WDDM TDR Enabled处,选择false->用鼠标点击确定->重新启动计算机1次->搞定。

您还可以参考:
nsight user guide——CUDA Debugging——Tutorial:Using the CUDA Debugger——EXERCISE1——关于TDR(Timeout Detection and Recovery)的介绍

把TDR设为fafalse了,但是k达到19000左右的时候还是出错误
the launch timed out and was terminated

这个错误在32位系统上也有
k比较大的时候有这个问题

显然您忘记重新启动了。否则关闭TDR不会提示您超时的。

重启了,然后当k加到19000的时候就又爆了

19000之前没问题

嗯嗯。所以让您取消超时,32位下速度较快(因为更小的寄存器压力),所以可能需要较大的k。建议您重启一下即可让取消超时生效。您可以通过单击您机箱上的reset按键完成此操作。

请问下我把指针char *dev_text2设在函数内部和设为全局变量有什么差吗,会对分配显存有影响吗

显然您的取消TDR没有生效。

在我如此推荐的多年内,所有的人都这样成功取消了。而楼主却没有。奇怪了。我建议楼主仔细复查上述步骤,重来一遍。

重来后,您可以运行sdk example里面的deviceQuery例子,看看是否runtime limit已经不存在了。

或者重来后,如果您确信自己操作无误,且重新启动了,您可以继续运行一次,看是否还报告“the launch timed out and was terminated"的错误。

您目前报告的是超时,我建议您先解决这个问题,然后考虑char *dev_text2作为局部变量或全局变量,对您的性能有何影响。

嗯,好,谢谢了

嗯嗯。您客气了。

除了用nsight外,您还可以谷歌下TDR, 然后微软MSDN上有手工的如何取消。您也可以尝试下。:slight_smile:

好厉害啊,32位系统上的“the launch timed out and was terminated"问题解决了,64位系统上的还没测,有问题回头再请教你们!

恭喜楼主!

感谢您莅临CUDAZone China,
祝您假日愉快!