2012-04-26 22 views
19

Tôi có một thủ tục tương đối chậm (hòn đảo có tên chậm), và tôi muốn làm một cái gì đó giống nhưNhận timings trong GHCi

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

trong giao diện điều khiển (REPL) để có được thời gian, thay vì phải biên dịch chương trình và sau đó chạy thời gian.

Việc này có thể thực hiện được không?

+3

Trong ghci? ': set + s' đưa bạn số liệu thống kê thời gian và phân bổ cho tất cả các biểu thức được đánh giá. Bạn có thể tự viết 'time' bằng' System.CPUTime.getCPUTime' nếu muốn. –

+1

Chỉ cần lưu ý rằng chương trình tương tác sẽ không cung cấp cho bạn thông tin chính xác về hiệu suất được biên dịch. – rotskoff

+5

Bạn có thể thích 'thời gian runhaskell foo.hs' và đồng nghiệp trung thực hơn của nó' ghc foo.hs -O2 && time./Foo'. –

Trả lời

35

Nếu bạn nhập :set +s vào GHCi, khi đó thông tin thời gian và bộ nhớ sẽ được in sau khi đánh giá mọi biểu thức.

Ví dụ:

Prelude> :set +s 
Prelude> sum [1..2^20] 
549756338176 
it :: (Num a, Enum a) => a 
(0.34 secs, 169,197,008 bytes) 

Lưu ý rằng đây sẽ là thời điểm của sự biểu hiện như đánh giá trong phiên dịch, mà không cần tối ưu hóa, vì vậy nó sẽ không nhất thiết phải là một thước đo chính xác của mất việc bao lâu, hoặc thậm chí trong đó hai phiên bản của cùng một mã sẽ nhanh hơn, trong mã được biên dịch thực tế. Để làm được điều đó, hãy xem thư viện đo điểm chuẩn criterion.

Các vấn đề liên quan