Сколько времени должно пройти сборка мусора перед удалением непрозрачного объекта FFI? Можно ли его как-то ускорить?

Я рассматриваю возможность написания привязок Haskell к библиотеке квантовой механики, написанной на C++ (я бы написал обычную оболочку C) и CUDA. Основным узким местом всегда является память графического процессора, используемая частями CUDA. В C++ это решается довольно эффективно, потому что все объекты имеют автоматическое управление памятью, т. е. стираются, как только покидают область видимости. Также я использую семантику перемещения С++ 11, чтобы избежать копий, которые, очевидно, в любом случае не понадобятся в Haskell.

Тем не менее, я обеспокоен тем, что управление объектами из Haskell со сборщиком мусора может работать уже не так гладко, и мне, возможно, придется придумать эвристику для переноса редко используемых объектов обратно в память хоста (что, как правило, довольно медленно). Обоснован ли этот страх, или сборка мусора GHC настолько эффективна, что большинство объектов исчезают почти так же быстро, как в C++, даже если исполняющая среда Haskell не видит необходимости экономить память? Существуют ли какие-либо хитрости, которые могут помочь, или способы сигнализировать о том, что некоторые объекты занимают слишком много памяти графического процессора и должны быть удалены как можно быстрее?

6
задан leftaroundabout 24 May 2012 в 11:58
поделиться