如何捕获重置机器的CUDA中的错误

时间:2013-01-17 09:27:33

标签: cuda nvidia nvcc

我已经实现了一个计算向量间距离的内核。程序按预期运行,结果与CPU相同。该程序释放设备中使用的资源(cudaFree)并正常退出。另外,在退出之前我使用cudaDeviceReset()

所有CUDA API调用都被包装以检查错误,如Eclipse Nsight API示例中所示。执行程序时不会报告错误。

在对全局内存执行读或写访问之前,内核检查内存位置索引,即if ( idx < N ) ...

在CPU中,循环执行p次,在调用内核之前执行cudaMalloccudaMemcpy(HtoD),在下一次迭代之前执行cudaFree()。在内核之后和cudaFree调用之前放置cudaDeviceSynchronize()以等待GPU启动工作完成。

在发布和调试模式下分析程序时,cuda-memcheck不会报告任何错误。

但是,有时计算机在运行程序时会重新启动,但我没有找到任何重复模式来跟踪错误。所以,我的问题是:我怎么能捕获这个错误?

我正在Ubuntu x86_64 GNU / Linux中使用CUDA 5.0版,V0.2.1221并运行X系统。该设备是GTX480,安装的驱动程序版本是304.54。

1 个答案:

答案 0 :(得分:1)

这是与设备温度有关的问题。

根据@Robert Crovella的评论,我在x86_64 GNU / Linux专用服务器(没有运行X系统)中执行内核,也使用CUDA 5但使用GTX680。该程序一直运行成功。

我使用nvidia-smi命令跟踪使用的GPU内存和温度,发现我的计算机在温度超过70度时进行了重置。

因此,该问题与任何内存泄漏或内存访问冲突无关,但需要大量使用该设备。