Po przeczytaniu parfib.hs code na github, widziałem ten komentarz o alokacji pamięci dla monadycznej wersji:analiza Przestrzeń dla parfib na przykład monada-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**
Czy istnieje jakiś papier lub blogu, że wyjaśnia to ogromne zużycie pamięci ? Przydzielanie pamięci w wersji niemonadycznej jest udokumentowane w komentarzu kodowym jako 17 GB (dla fib (42)). Przeszukałem papiery par monady i prezentację Simona Marlowa, ale nie widziałem żadnej analizy śladów pamięciowych dla parfib.
Należy pamiętać, że 240 GB przydzielone podczas biegu niekoniecznie oznacza, że był moment, w którym bieg wykorzystał 240 GB. Programy Haskell (i inne oparte na języku funkcjonalnym) mają tendencję do przypisywania i alokowania - dlatego tak wiele badań optymalizacyjnych dotyczących GHC koncentruje się na strategiach alokacji i odśmiecaniu. –