c++ - 一旦 cudaMalloc 返回内存不足,每个 cuda API 调用都会返回失败

标签 c++ memory cuda

有了 CUDA,是否可以像垃圾回收一样使用?

例如,当我从 cudaMalloc(...) 得到内存不足错误时,我可以释放之前分配的数据并重新分配内存吗?

一旦 cudaMalloc(...) 返回内存不足, 之后的 cuda 调用似乎返回内存不足。 即使当我使用之前分配的有效设备指针调用 cudaFree 时,cudaFree 也会返回内存不足...

cudaDeviceReset() 不是恢复我的案例状态的好方法。

最佳答案

一旦 CUDA 遇到错误,所有 API 调用都将返回该错误。如果错误破坏了 CUDA 上下文,则除了重置设备 (cudaDeviceReset) 之外别无他法。如果 CUDA 上下文没有被破坏,那么状态可以是 reset通过调用 cudaGetLastError()cudaSuccess

根据 Robert Crovella 的 comment ,失败的 cudaMalloc 可能不会破坏 CUDA 上下文,因此您应该能够恢复。这不一定适用于其他错误原因,每个情况都可能不同。

关于c++ - 一旦 cudaMalloc 返回内存不足,每个 cuda API 调用都会返回失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30909368/

相关文章:

c++ - 使用 C++ 在文件上保存一个字符指针

c++ - 从堆栈指针中找出函数参数值

c++ - 可以将标准 GDB 调试器与 Qt 可执行文件一起使用吗?

c++ - 雪碧批处理概念

c - malloc() 不为大块内存分配内存

c - C中的GetTotalMemory分配

c# - 产量返回-内存优化

c++ - 可以使用 clang 将 C++17 与 CUDA 一起使用吗?

matlab - 通过 cuFFT 在逆 FFT 中缩放

c++ - 使用 cublas sgemv 时如何跳过 float4 中的第四个元素?