多久我应该期待一个垃圾收集删除不透明FFI对象之前走? 是否有可能加快步伐某种方式?(How l

2019-09-17 11:18发布

我考虑写哈斯克尔绑定C语言编写的一个量子力学库++(我会写一个普通的C包装)和CUDA。 一个主要的瓶颈始终是由CUDA部分使用的GPU内存。 在C ++中,这是非常有效率地处理,因为所有对象都具有自动内存管理,即是只要他们离开范围擦除。 此外,我使用C ++ 11个移动语义,以避免拷贝,这些显然不会在Haskell必要的反正。

然而,我担心它可能不是当对象是从垃圾收集哈斯克尔管理的顺利工作了,我可能需要拿出启发式迁移很少使用的对象回到主机内存(这往往是很慢) 。 这是合理的恐惧或者说是GHC垃圾收集如此有效,大多数物体几乎一样迅速消失在C ++,即使哈斯克尔运行时不会看到它需要经济上的内存? 是否有任何技巧,帮助,或方式的信号,有些对象占用过多的GPU内存,应尽可能迅速取出?

Answer 1:

即使Haskell的运行时不会看到它需要经济上的内存?

这是问题:GHC GC不知道你的异物有多大,所以他们没有施加任何堆压,因而不尽快,因为他们可以收集。

您可以通过调用减轻这种performGC手动给力的主要GC。



文章来源: How long should I expect a garbage collection to take before removing an opaque FFI object? Is it possible to speed it up some way?