释放cuda显存及进程

1. 查看当前cuda所有进程

方法1:使用nvidia-smi,查看当前在工作的所有进程PID

方法2:使用fuser -v /dev/nvidia*,查看当前在工作的所有进程,及占用显存的进程PID

使用方法2,能够查看nvidia-smi中占据显存,但是不工作,并且看不到的进程PID

2. 杀死进程

方法1:逐个关闭方法,即使用kill -9 PID,将占用cuda的进程逐一杀死;

方法2:关闭所有占据cuda显存的进程,fuser -k /dev/nvidia*

使用方法2,能够一行命令,释放所有占据显存的进程,比较方便。

参考文献

【cuda】释放cuda显存及进程

### 如何在 Linux 系统中正确释放 CUDA 资源 在 Linux 下管理 CUDA 资源涉及多个方面,包括显存分配、流控制以及设备上下文管理。以下是关于如何正确释放 CUDA 资源的关键点: #### 显存管理 CUDA 使用 `cudaFree` 函数来释放之前通过 `cudaMalloc` 或其他内存分配函数申请的 GPU 显存[^3]。任何未被正确释放显存可能会导致程序崩溃或者后续运行失败。 ```cpp // 假设 d_data 是一块已经分配好的GPU内存指针 if (d_data != nullptr){ cudaError_t err = cudaFree(d_data); if(err != cudaSuccess){ fprintf(stderr, "Failed to free device memory: %s\n", cudaGetErrorString(err)); } } ``` 上述代码展示了标准做法,在调用 `cudaFree` 后应检查返回状态以确认操作成功与否。 #### 流销毁 当使用 CUDA Streams 来实现并行计算时,创建的 stream 需要在不再需要的时候销毁。这可以通过调用 `cudaStreamDestroy` 实现[^4]。 ```cpp cudaError_t err; err = cudaStreamDestroy(stream); if (err != cudaSuccess){ printf("cudaStreamDestroy failed with error code %d: %s\n", err, cudaGetErrorString(err)); } ``` 此部分强调了清理自定义 streams 的重要性,防止潜在泄漏问题发生。 #### 设备重置 对于某些复杂的应用场景可能还需要考虑整个设备环境的重置工作,可以利用 `cudaDeviceReset()` 完成这一目标[^5]。注意该命令会终止当前进程中的所有活动任务并将硬件恢复到初始态,因此通常只应在应用程序结束前执行一次。 ```cpp cudaError_t resetErr = cudaDeviceReset(); if(resetErr != cudaSuccess){ printf("cudaDeviceReset returned error code %d, line(%d): %s\n",resetErr,__LINE__, cudaGetErrorString(resetErr)); } ``` 以上介绍了几种主要方法用于确保Linux平台上的CUDA资源能够得到妥善处理。值得注意的是这些实践不仅适用于单独开发阶段也广泛应用于持续集成环境中比如提到过的MSVC设置情况同样适用类似的原理即保证构建过程中所依赖的各项组件均处于良好配置之下从而保障最终产物的质量稳定可靠[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值