Mam stosunkowo powolne procedury (trafnie nazwany wolno), i chciałbym zrobić coś takiegoGet czasy w GHCi
time $ slow [1,2,3,4,5]
w konsoli (REPL), aby uzyskać czas, zamiast kompilacji program, a następnie uruchom.
Czy to można zrobić?
Mam stosunkowo powolne procedury (trafnie nazwany wolno), i chciałbym zrobić coś takiegoGet czasy w GHCi
time $ slow [1,2,3,4,5]
w konsoli (REPL), aby uzyskać czas, zamiast kompilacji program, a następnie uruchom.
Czy to można zrobić?
Jeśli wpiszesz :set +s
w GHCi, informacje o czasie i pamięci zostaną wydrukowane po dokonaniu oceny każdego wyrażenia.
Przykład:
Prelude> :set +s
Prelude> sum [1..2^20]
549756338176
it :: (Num a, Enum a) => a
(0.34 secs, 169,197,008 bytes)
Należy pamiętać, że będzie to czas wyrażenia jak oceniano w tłumacza, bez optymalizacji, więc nie będzie to koniecznie dokładną miarą tego, jak długo rzeczy wziąć, lub nawet która z dwóch wersji tego samego kodu będzie szybsza, w rzeczywistym skompilowanym kodzie. W tym celu zapoznaj się z biblioteką porównawczą criterion.
In ghci? ': set + s' pobiera statystyki synchronizacji i alokacji dla wszystkich ocenianych wyrażeń. Możesz sam napisać 'time' używając' System.CPUTime.getCPUTime', jeśli chcesz. –
Należy pamiętać, że program interaktywny nie dostarczy dokładnych informacji na temat kompilowanej wydajności. – rotskoff
Może Ci się spodobać 'time runhaskell foo.hs' oraz jego bardziej uczciwy gość' ghc foo.hs -O2 && time./Foo'. –