Tôi chạy Perf phân tích về chương trình trống sau,Perf stat cho số giảng dạy khác nhau cho mỗi chạy
#include <stdio.h>
int main() {
}
Sau khi biên dịch và chạy Perf stat ./a.out tôi có đầu ra sau đây nói (cùng với các dữ liệu khác như số chu kỳ, đồng hồ công việc, v.v.):
418,869 instructions # 0.87 insns per cycle
Số lượng hướng dẫn thay đổi trong mỗi lần phân tích 'hoàn thiện' trên cùng một tinh tinh.
Nhu cầu thực tế của tôi là tìm số lượng hướng dẫn trong một chức năng cụ thể mà tôi đã viết. Vì vậy, tôi sẽ trừ số ở trên từ số lượng hướng dẫn trong chương trình mới. (Tôi có thể đếm số dòng trong chương trình được tạo bằng cách sử dụng thẻ -S trong gcc nhưng tôi bối rối sau khi xem hành vi hoàn hảo)
Tại sao số lượng hướng dẫn không nhất quán, chính xác không giống nhau?
Cập nhật Tôi làm theo các ví dụ được đưa ra trong man page sử dụng perf_event_open() trong C
perf_event_open() đã cho tôi số đếm chính xác bằng với số lượng hướng dẫn trong tệp .s. perf stat -e hướng dẫn: u a.out cũng cung cấp số đếm khác nhau mỗi lần nhưng biến thể không lớn như trong kịch bản được giải thích trong câu hỏi. – Vignesh
sử dụng perf_event_open bạn chính xác nkwo những gì bạn đo. Đối với biến thể (nhỏ) còn lại ngay cả sau khi thêm: u Tôi đoán rằng nhiều điều vẫn được thực hiện trong không gian người dùng trước khi chức năng chính trong chương trình của bạn được gọi, và có thể có một số biến thể ở đây. –