Sử dụng bộ đếm tốt nhất có sẵn trên nền tảng của bạn, rơi trở lại thời gian() cho tính di động. Tôi đang sử dụng QueryPerformanceCounter, nhưng xem các bình luận trong trả lời khác.
lời khuyên chung:
Các bên trong vòng lặp nên chạy ít nhất khoảng 20 lần so với độ phân giải của đồng hồ của bạn, để làm cho các lỗi độ phân giải < 5%. (vì vậy, khi sử dụng time() vòng lặp bên trong của bạn sẽ chạy ít nhất 20 giây)
Lặp lại các phép đo này, để xem chúng có nhất quán hay không.
Tôi sử dụng thêm vòng ngoài, chạy mười lần và bỏ qua phép đo nhanh nhất và chậm nhất để tính trung bình và độ lệch. Độ lệch có ích khi so sánh hai lần triển khai: nếu bạn có một thuật toán lấy 2.0ms +/-. 5 và khác 2.2 +/- .5, sự khác biệt không đáng kể khi gọi một trong số đó là "nhanh hơn". (tối đa và tối thiểu sẽ vẫn được hiển thị). Vì vậy, IMHO một đo lường hiệu suất hợp lệ nên tìm một cái gì đó như thế này:
10000 x 2.0 +/- 0.2 ms (min = 1.2, , max=12.6), 10 repetitions
Nếu bạn biết những gì bạn đang làm, thanh lọc bộ nhớ cache và thiết lập chủ đề mối quan hệ có thể làm cho số đo của bạn nhiều mạnh mẽ hơn.
Tuy nhiên, đây không phải là không có pifalls. Độ đo càng "ổn định" càng ít thì nó càng ít thực tế. Mọi triển khai sẽ thay đổi mạnh theo thời gian, tùy thuộc vào trạng thái dữ liệu và bộ nhớ cache lệnh. Tôi lười biếng ở đây, sử dụng giá trị max = để phán đoán hình phạt đầu tiên, điều này có thể không đủ cho một số trường hợp.
RELA ted question: http://stackoverflow.com/questions/275004/c-timer-function-to-provide-time-in-nano-seconds –
Thời gian phụ thuộc vào nền tảng. Bạn nên liệt kê (các) nền tảng nào bạn đang sử dụng. –
Thật đáng thất vọng vì không có câu trả lời nào ở đây có thành phần thống kê. – uckelman