có cách nào tốt đẹp của GNU để đo thời gian thực hiện trung bình (trường hợp xấu nhất, tốt nhất) của một số chương trình dòng lệnh không? Tôi có bộ lọc hình ảnh, số lượng hình ảnh không xác định, lọc chúng bằng cách sử dụng vòng lặp trong bash. Cho đến nay tôi đang sử dụng thời gian, nhưng tôi không thể tìm cách để có được một số thống kê.Thời gian thực hiện trung bình
Trả lời
Có một chương trình Perl thú vị được gọi là dumbbench về bản chất là một trình bao bọc xung quanh lệnh time
. Nó chạy chương trình của bạn một số lần, ném đi các ngoại lệ, sau đó tính toán một số số liệu thống kê.
Tác giả có một vài bài viết (here và here) phác thảo a) lý do điểm chuẩn hút và b) loại đồ thị đẹp mà bạn có thể thực hiện để làm cho số đo điểm chuẩn của bạn kém hơn một chút.
Tôi chỉ hy vọng tôi có thể vượt qua các thông số khác nhau cho mỗi lần chạy, tôi sẽ kiểm tra nó tối nay. –
Bạn đang đi đúng hướng với time
. Đó là những gì tôi sử dụng để tạo ra các phân tích thực thi mã nhỏ.
Sau đó, tôi sử dụng python để thu thập số liệu thống kê bằng cách đọc đầu ra của time
. Để tăng độ chính xác, tôi thường thực hiện thử nghiệm 10 - 1000 lần, tùy thuộc vào thời gian mỗi quá trình thực hiện.
Tôi không quen với bất kỳ ứng dụng GNU được cài đặt sẵn nào thực hiện loại phân tích này.
Nếu bạn định sử dụng Python, bạn có thể muốn sử dụng [timeit] (http://www.python.org/doc//current/library/timeit.html). – GreenMatt
Quay lại những ngày cũ, chúng tôi chạy chương trình 12 lần bằng cách sử dụng 'thời gian', đã ném ra thời gian tốt nhất và tồi tệ nhất, sau đó tính trung bình 10 giá trị còn lại. –
Tôi thích thời gian! Tôi chỉ khuyên bạn nên piping trong dữ liệu từ 'time' vì tôi không muốn có python kiểm soát việc thực hiện các lệnh của tôi và do đó có khả năng làm chậm việc thực thi bằng cách capture stdin và whatnot. Đó là loại như thế, tôi nên sử dụng C hoặc tôi nên sử dụng Python: Đó là loại cảm giác. – Sean
Bạn có thể gửi kết quả của thời gian để một số tập tin, và sau đó "làm việc" tập tin đó
echo "some info" >> timefile.txt
time (./yourprog parm1 parm2) 2>> timefile.txt
#!/bin/bash
for i in {1..100}
do
env time --append -o time_output.txt ./test_program --arguments-to-test-program
done
exit
Nếu bạn thấy rằng {} 1..100 cú pháp không làm việc cho bạn thì bạn nên xem lệnh seq.
Tôi đã sử dụng env time
để thực thi chương trình thời gian thay vì lệnh được tích hợp sẵn của trình bao, mà không lấy tất cả các đối số mà chương trình thời gian thực hiện. Chương trình thời gian cũng có các đối số khác để thay đổi định dạng của đầu ra của nó, mà bạn có thể sẽ muốn sử dụng để làm cho dữ liệu dễ dàng hơn để xử lý bởi một chương trình khác. Đối số -p (--portability) làm cho nó xuất ở định dạng POSIX (như thời gian dựng sẵn của BASH), nhưng sử dụng tùy chọn -f bạn có thể kiểm soát nhiều hơn. man 1 time
để biết thêm thông tin.
Sau khi bạn đã thu thập dữ liệu của mình, một tập lệnh perl hoặc python đơn giản có thể dễ dàng phân tích cú pháp và phân tích dữ liệu thời gian của bạn.
Bạn không phải sử dụng 'seq'. Bạn có thể làm 'for ((i = 1; i <= 100; i ++))'. –
Nếu có thể, tôi muốn tránh viết phân tích riêng của mình nếu người khác làm. –
Bạn nên cân nhắc có nên bỏ thời gian vòng lặp bên ngoài và chia cho các lần lặp lại thay vì định thời gian mỗi lần lặp lại riêng biệt hay không. Nếu bạn lo lắng về việc loại bỏ cao và thấp, chỉ cần thực hiện thêm một vài lần lặp lại để tiêu diệt chúng.
time for i in {1..1000}
do
something
done
Bạn có thể capture the output from time in a variable:
foo=$({ time {
echo "stdout test message demo"
for i in {1..30}
do
something
done
echo "stderr test message demo" >&2
} 1>&3 2>&4; } 2>&1)
và làm một số giả toán:
foo=${foo/.} # "divide" by ...
echo "0.00${foo/#0}" # ... 1000
Hoặc chỉ cần sử dụng bc
:
echo "scale=8; $foo/1000" | bc
- 1. Cách tính thời gian chờ trung bình và thời gian quay vòng trung bình trong lập lịch SJF?
- 2. Thời gian bấm phím trung bình khi nhập
- 3. Trung bình khoảng thời gian của dữ liệu 1D
- 4. Cửa sổ trượt trung bình theo các trục thời gian
- 5. Tính toán trung bình di chuyển theo thời gian
- 6. trích xuất thời gian trung bình từ ping -c
- 7. LINQ Thời gian trung bìnhSpan?
- 8. Đo thời gian thực hiện xem trong phần mềm trung gian Django - ý tưởng hay?
- 9. thời gian thực hiện mysql
- 10. tính thời gian thực hiện trong C++
- 11. Gói R và thời gian thực hiện
- 12. Thời gian thực hiện CPU trong Java
- 13. symfony2 - Nhận thời gian thực hiện
- 14. Thực hiện bộ đếm thời gian JavaScript
- 15. Tìm thời gian thực hiện Phương thức
- 16. ActiveRecord SQL thời gian thực hiện
- 17. Thời gian thực hiện truy vấn MySql
- 18. Postgres Truy vấn thời gian thực hiện
- 19. Chia chuỗi thời gian không thường xuyên thành trung bình hàng tháng - R
- 20. nhận được Thời gian trung bình từ DB và trừ một Ngày từ một số khác
- 21. Thời gian hết hạn của Cookie HTTP (trung bình, tối đa, ...)
- 22. Xếp hạng sao, thực hiện khoảng thời gian Wilson
- 23. Thời gian trung bình để phê duyệt ứng dụng iPhone trên Appstore
- 24. Vẽ trung bình nhiều biến trong chuỗi thời gian bằng ggplot
- 25. mặt chuỗi thời gian với cấu hình trung bình trong ggplot2
- 26. Tính trung bình di chuyển trong C++
- 27. Điểm trung bình/điểm cuộc họp hình học Thực hiện 2D
- 28. thiết kế ứng dụng có kích thước trung bình lớn khi thực hiện TDD?
- 29. Làm thế nào để thực hiện chức năng chung trung bình trong scala?
- 30. Nhóm trung gian Crossfilter
@chown Điểm của nhận xét ở trên là gì? –
Câu hỏi tương tự có một số câu trả lời hay - [bash: Thời gian chạy trung bình trên một số lần chạy] (http://stackoverflow.com/questions/8215482/mean-running-time-over-a-number-of-runs/ 8216082 # 8216082). – chown