Làm cách nào để tôi có được thời gian chạy chương trình thông qua các chức năng thời gian của hệ thống trong Haskell? Tôi muốn đo thời gian thực hiện của toàn bộ chương trình và/hoặc chức năng riêng lẻ.Làm thế nào để có được thời gian chạy của chương trình trong Haskell
Trả lời
Giả sử bạn không chỉ muốn để đo tổng thời gian chạy chương trình của bạn, như vậy:
$ time ./A
Sau đó, bạn có thể thời gian một tính toán một số cách trong Haskell:
- Basic timing (ví dụ như trong timeit package)
- Timing in cycles
Để có thêm phép đo âm thanh thống kê, hãy xem xét
Cuối cùng, trong mọi trường hợp, bạn cần suy nghĩ về đánh giá lười biếng: bạn có muốn đo lường chi phí đánh giá đầy đủ bất kỳ dữ liệu nào bạn tạo hoặc chỉ với nhà xây dựng ngoài cùng không?
cũng sẽ hoạt động trên Windows không? –
Các giải pháp Haskell đều hoạt động trên Windows, vâng. –
Điều gì về việc biên dịch với '-prof' và sử dụng' + RTS -s'? – ErikR
1) Nếu bạn muốn chuẩn bị thứ gì đó, hãy sử dụng gói criterion.
2) Nếu bạn muốn để thời gian một hàm và tích cực bạn đã kiểm soát đối với sự lười biếng khi cần thiết, sau đó chỉ cần sử dụng Data.Time.getCurrentTime
từ gói time .:
import Data.Time
...
start <- getCurrentTime
runOperation
stop <- getCurrentTime
print $ diffUTCTime stop start
Một bao bì áo mưa của mô hình trên có thể được được tìm thấy trong gói timeit.
3) Nếu bạn thực sự muốn thời gian chạy của chương trình chỉ xảy ra được viết bằng Haskell thì hãy sử dụng tiện ích của bạn time
. Đối với hầu hết các hệ thống POSIX (Mac, Linux) chỉ cần chạy:
$ time ./SomeProgram
Và nó sẽ báo cáo người dùng, tường và thời gian hệ thống.
Tôi không chắc nó chính xác như thế nào, nhưng việc sử dụng :set +s
trong ghci sẽ hiển thị thời gian và không gian được sử dụng cho các tính toán tiếp theo.
cảm ơn vì sự thấu hiểu! –
:set +s
thực sự gọn gàng nếu sử dụng ghci, nếu không bạn có thể sử dụng Criterion.Measurement
, xem my answer to another question with example.
Xem thêm http://stackoverflow.com/questions/1516808/writing-a-time-function-in-haskell –