在删除不透明的 FFI 对象之前,垃圾回收需要多长时间?有可能以某种方式加快速度吗?

2023-12-27

我考虑将 Haskell 绑定编写到用 C++(我会编写一个普通的 C 包装器)和 CUDA 编写的量子力学库。主要瓶颈始终是 CUDA 部分使用的 GPU 内存。在 C++ 中,处理起来非常高效,因为所有对象都有自动内存管理,即一旦离开作用域就会被删除。另外,我使用 C++11 移动语义来避免复制,无论如何,这些在 Haskell 中显然是不必要的。

然而,我担心当对象是从垃圾收集的 Haskell 管理时,它可能不再顺利工作,并且我可能需要想出启发法将很少使用的对象迁移回主机内存(这往往很慢) 。这种担心是否合理,或者 GHC 垃圾收集是否如此有效,以至于大多数对象几乎会像 C++ 中一样快地消失,即使 Haskell 运行时认为它不需要节省内存?是否有任何技巧可以提供帮助,或者有什么方法可以表明某些对象占用了过多的 GPU 内存并应尽快删除?


即使 Haskell 运行时认为它不需要节省内存?

这就是问题所在:GHC GC 不知道您的异物有多大,因此它们不会施加任何堆压力,因此不会尽快收集。

您可以通过调用来缓解这种情况performGC手动强制进行主要 GC。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在删除不透明的 FFI 对象之前,垃圾回收需要多长时间?有可能以某种方式加快速度吗? 的相关文章

随机推荐