2012-04-26 14 views
19

zamanlamaları al, ben yerine derlemek zorunda kalmadan, saati almak için konsola (REPL) içindeBen nispeten yavaş bir prosedür (uygun bir şekilde yavaş adlandırılır) sahip GHCi

time $ slow [1,2,3,4,5] 

böyle bir şey yapmak istiyorum Program ve daha sonra zaman çalıştırın.

Bu yapılabilir mi?

+3

Ghci'de? ': set + s' tüm değerlendirilen ifadeler için zamanlama ve tahsis istatistiklerini alır. İsterseniz 'System.CPUTime.getCPUTime' kullanarak bir' '' '' '' 'yazabilirsiniz. –

+1

Sadece interaktif programın derlenmiş performans hakkında doğru bilgi vermeyeceğini unutmayın. – rotskoff

+5

Zaman runhaskell foo.hs' ve onun daha dürüst arkadaşım ghc foo.hs -O2 && time./Foo' gibi olabilir. –

cevap

35

GHCi'ye :set +s girerseniz, her ifade değerlendirildikten sonra zamanlama ve bellek bilgisi yazdırılır.

Örnek:

Bu optimizasyon olmadan tercüman değerlendirilen olarak ifade zamanlaması, olacak, bu yüzden mutlaka almak ne kadar uzun şeyler doğru bir ölçü olması, hatta olmayacak
Prelude> :set +s 
Prelude> sum [1..2^20] 
549756338176 
it :: (Num a, Enum a) => a 
(0.34 secs, 169,197,008 bytes) 

Not Aynı kodun iki versiyonundan hangisinin gerçek derlenmiş kodda daha hızlı olacağı. Bunun için criterion kıyaslama kütüphanesine bir göz atın.