2013-07-25 44 views
11

Tôi mới sử dụng ngôn ngữ D và cần đo thời gian thực hiện của thuật toán. Những lựa chọn của tôi là gì? Đã có một số giải pháp tích hợp chưa? Tôi không thể tìm thấy bất cứ điều gì kết luận trên web.Đo thời gian thực hiện bằng ngôn ngữ D

Trả lời

14

Một cách là sử dụng thông số dòng lệnh -profile. Sau khi bạn chạy chương trình, nó sẽ tạo tệp trace.log nơi bạn có thể tìm thấy thời gian chạy cho từng chức năng. Điều này tất nhiên sẽ làm chậm chương trình của bạn như trình biên dịch sẽ chèn thời gian đếm mã vào mỗi chức năng của bạn. Phương pháp này được sử dụng để tìm tốc độ tương đối của các hàm, để xác định bạn nên tối ưu hóa điều gì để cải thiện tốc độ ứng dụng với nỗ lực tối thiểu.

Tùy chọn thứ hai là sử dụng std.datetime.StopWatch lớp học. Xem ví dụ trong liên kết.

Hoặc thậm chí phù hợp hơn nữa có thể là sử dụng trực tiếp chức năng std.datetime.benchmark.

Đừng quên:

  1. Khi điểm chuẩn sử dụng những lá cờ biên dịch DMD để đạt được tối đa tối ưu hóa -release -O -inline -noboundscheck.
  2. Không bao giờ chuẩn bị gỡ lỗi bản dựng.
  3. Đảm bảo bạn không gọi bất kỳ mã thư viện nào bên trong các hàm được đo điểm chuẩn - Bạn sẽ đánh giá hiệu suất của việc triển khai thư viện thay vì mã của riêng bạn.

Ngoài ra, bạn có thể xem xét sử dụng các trình biên dịch LDC hoặc GDC. Cả hai đều cung cấp tối ưu hóa tốt hơn/tốc độ chạy ứng dụng hơn DMD.

+0

Hồ sơ không phải là những gì tôi cần trong trường hợp này, nhưng 'std.datetime.StopWatch' chính xác là những gì tôi đang tìm kiếm. – clstaudt

3

Nếu thuật toán của bạn có thể được gọi từ dòng lệnh có một tiện ích tiện lợi được viết bằng D sẽ chạy chương trình của bạn một số thời gian và in ra thời gian trung bình đã lấy và tất cả các số hữu ích khác.

Nó được gọi là avgtime và nó ở đây: https://github.com/jmcabo/avgtime

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