有了 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/