Durante la lettura attraverso parfib.hs code su GitHub, ho visto questo commento su allocazione di memoria per la versione monadica:analisi Spazio per parfib nell'esempio monade-par
Monad-par version:
fib(38) non-threaded: 23.3s 23.1s
fib(38) 1 thread : 24.7s 24.5s
fib(38) 4 threads: 8.2s 31.3s
fib(40) 4 threads: 20.6s 78.6s **240GB allocated**
non v'è alcun messaggio di carta o blog che spiega questo enorme occupazione di memoria ? L'allocazione di memoria della versione non monadica è documentata nel commento del codice come 17 GB (per fib (42)). Ho cercato tra le carte di monade e presentazione di Simon Marlow ma non ho visto alcuna analisi delle impronte di memoria per parfib.
Si noti che 240 GB allocati durante una corsa non indicano necessariamente l'esistenza di un momento in cui la corsa utilizzava 240 GB. Haskell (e altri programmi basati sulla lingua funzionale) tendono a fare uno "slot" di allocazione e de-allocazione - che è il motivo per cui gran parte della ricerca di ottimizzazione su GHC si concentra sulle strategie di allocazione e sul garbage collector. –