使用CUDA,是否可以像垃圾收集一样使用?
例如,当我收到内存不足错误时cudaMalloc(...),是否可以释放先前分配的数据并重试分配内存?
一旦cudaMalloc(...)返回内存不足,以下cuda调用似乎在此之后返回内存不足.即使我用之前分配的有效设备指针调用cudaFree,cudaFree也会返回内存不足...
cudaDeviceReset() 对我的案子来说,恢复状态不是一个好方法.
一旦CUDA遇到错误,所有API调用都将返回该错误.如果错误破坏了CUDA上下文,除了重置设备(cudaDeviceReset)之外没什么可做的.如果CUDA上下文没有被破坏,那么状态可以被重置到cudaSuccess调用cudaGetLastError().
根据Robert Crovella的评论,失败cudaMalloc可能不会破坏CUDA环境,因此你应该能够恢复.这不一定适用于错误的其他原因,并且每种情况可能不同.