标签: c++ memory cuda
使用CUDA,是否可以像垃圾收集一样使用?
例如,当我从cudaMalloc(...)收到内存不足错误时,是否可以释放先前分配的数据并重试分配内存?
cudaMalloc(...)
一旦cudaMalloc(...)返回内存不足, 以下cuda调用似乎在此之后返回内存不足。 即使我用之前分配的有效设备指针调用cudaFree,cudaFree也会返回内存不足...
cudaDeviceReset()不是恢复我案件状态的好方法。
cudaDeviceReset()
答案 0 :(得分:5)
一旦CUDA遇到错误,所有API调用都将返回该错误。如果错误破坏了CUDA上下文,除了重置设备(cudaDeviceReset)之外没什么可做的。如果CUDA上下文没有被破坏,那么通过调用cudaSuccess,状态可以是reset到cudaGetLastError()。
cudaDeviceReset
cudaSuccess
cudaGetLastError()
根据Robert Crovella的comment,失败的cudaMalloc可能不会破坏CUDA上下文,因此您应该能够恢复。这不一定是错误的其他原因,每种情况可能都不同。
cudaMalloc