0

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

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

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

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

cuda-memcheckRelease 和 Debug 模式下分析程序时不会报告任何错误。

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

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

4

1 回答 1

1

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

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

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

因此,问题与任何内存泄漏或内存访问冲突无关,而是与设备的密集使用有关。

于 2013-01-17T11:51:23.343 回答