如果没有使用cudaFree(),在使用它的应用程序退出后,GPU上分配的内存会发生什么变化?
如果最后没有使用cudaFree(),那么在使用它的应用程序/内核函数退出后,正在使用的内存是否会自动释放?是 当应用程序终止时(无论是否正常),操作系统都会回收其所有内存,而不管它是否有如果没有使用cudaFree(),在使用它的应用程序退出后,GPU上分配的内存会发生什么变化?,cuda,gpgpu,Cuda,Gpgpu,如果最后没有使用cudaFree(),那么在使用它的应用程序/内核函数退出后,正在使用的内存是否会自动释放?是 当应用程序终止时(无论是否正常),操作系统都会回收其所有内存,而不管它是否有空闲的d内存。 类似地,GPU上分配的内存由其驱动程序管理,该驱动程序将释放应用程序持有的所有资源,cudaFreed 然而,每个分配都有一个匹配的释放,这是一个很好的实践,所以不要以此为借口不正确地释放内存:)据我所知,如果不在循环中释放内存,或者如果多次声明内存,声明的内存将累积。最终系统将耗尽内存。谢谢你
空闲的d内存。
类似地,GPU上分配的内存由其驱动程序管理,该驱动程序将释放应用程序持有的所有资源,cudaFree
d
然而,每个分配都有一个匹配的释放,这是一个很好的实践,所以不要以此为借口不正确地释放内存:)据我所知,如果不在循环中释放内存,或者如果多次声明内存,声明的内存将累积。最终系统将耗尽内存。谢谢你的回答,Gregor:)但是如果在应用程序结束后GPU驱动程序自动释放资源,为什么要增加程序员的工作量(还有一件事要记住和做)和代码长度(这意味着更难编写和调试)建议将取消分配作为一种好的做法?嗨@Buzz,这是一个好问题,答案并不琐碎,因此你不妨将其作为一个单独的问题提问。简言之,一般来说,每个分配都应该有一个匹配的解除分配。在长时间运行的进程中跳过释放将导致内存泄漏,然后在系统内存不足时崩溃。在短期流程中或在应用程序关闭期间跳过释放可以被视为一种优化。