我考虑编写Haskell绑定到一个用C++(我将编写一个普通的C包装器)和CUDA编写的量子力学库。 CUDA部分使用的GPU内存始终是一个主要瓶颈。在C++中,这种情况可以有效处理,因为所有对象都具有自动内存管理,即一旦它们离开范围就会被删除。此外,我使用C++11移动语义来避免复制,无论如何在Haskell中都不需要这些复制。
然而,我担心当对象从垃圾收集的Haskell中管理时,它可能不再像以前那样工作顺畅,我可能需要想出启发式方法将很少使用的对象迁移到主机内存(这往往非常缓慢)。这种担忧是否合理? GHC垃圾收集是否如此有效,以至于大多数对象将几乎与C++中一样快地消失,即使Haskell运行时不认为它需要节约内存?有什么技巧可以帮助,或者有没有办法表明某些对象占据了太多的GPU内存,应尽快删除?