【发布时间】:2012-05-04 21:27:22
【问题描述】:
我正在使用一些 GPU 程序(使用 CUDA 4.1 和 C),有时(很少)我必须使用 Ctrl+C 中途终止程序以处理一些异常。早些时候我尝试使用 CudaDeviceReset() 函数,但this reply by talonmies 取代了我对 CudaDeviceReset() 的信任,因此我开始以老式方式处理此类异常,即“计算机重启”。随着项目规模的增长,这种方法越来越令人头疼。如果有人提出更好的解决方案,我将不胜感激。
【问题讨论】:
-
正如我之前写给您的回复一样,
cudaDeviceReset()非常适合破坏上下文并释放进程分配给自己的资源。您应该在退出时在代码中调用它。但它不能解决其他进程引起的问题。如果您的主机代码或设备代码在不使主机驱动程序或设备处于需要重新启动的危险状态的情况下无法运行和终止,那么您首先要解决更严重的设计或代码问题。 CUDA linux 驱动程序过去曾遇到过 Ctrl+C 问题,但这些问题在几年前就已修复 AFAIK .....
标签: memory-leaks cuda nvidia gpu