Tôi đã thấy rằng đồng hồ thông thường (), mọi người đều khuyên dùng ở đây, vì một số lý do khiến chúng ta chạy lệch khỏi chạy để chạy, ngay cả đối với mã tĩnh mà không có bất kỳ tác dụng phụ nào, như vẽ lên màn hình hoặc đọc tệp. Có thể là do CPU thay đổi chế độ tiêu thụ năng lượng, HĐH đưa ra các ưu tiên khác nhau, v.v ...
Vì vậy, cách duy nhất để có được kết quả tương tự mỗi lần với clock () là chạy mã được đo trong một vòng lặp nhiều lần (trong vài phút), thực hiện các biện pháp phòng ngừa để ngăn chặn trình biên dịch tối ưu hóa: trình biên dịch hiện đại có thể tính toán trước mã không có tác dụng phụ chạy trong một vòng lặp và di chuyển nó ra khỏi vòng lặp., giống như sử dụng đầu vào ngẫu nhiên cho mỗi lần lặp.
Sau khi đủ các mẫu được thu thập vào một mảng, người ta sắp xếp mảng đó và lấy phần tử ở giữa, được gọi là trung vị. Median tốt hơn mức trung bình, bởi vì nó loại bỏ các độ lệch cực lớn, như nói rằng chương trình chống vi-rút chiếm hết CPU hoặc HĐH thực hiện một số cập nhật.
Đây là một tiện ích đơn giản để đo hiệu suất thực thi của mã C / C ++, tính trung bình các giá trị gần trung vị: https://github.com/saniv/gauge
Bản thân tôi vẫn đang tìm kiếm một cách mạnh mẽ hơn và nhanh hơn để đo lường mã. Người ta có thể thử chạy mã trong các điều kiện được kiểm soát trên kim loại trần mà không cần bất kỳ HĐH nào, nhưng điều đó sẽ cho kết quả không thực tế, bởi vì trong thực tế, HĐH có liên quan.
x86 có các bộ đếm hiệu suất phần cứng này, bao gồm số lượng lệnh thực tế được thực thi, nhưng chúng rất khó truy cập mà không có sự trợ giúp của hệ điều hành, khó diễn giải và có vấn đề riêng ( http://archive.gamedev.net/archive/reference/articles /article213.html ). Tuy nhiên, chúng có thể hữu ích trong việc điều tra bản chất của cổ chai (truy cập dữ liệu hoặc tính toán thực tế trên dữ liệu đó).