This question và câu trả lời của nó, gần đây đã được gắn thẻ là Câu trả lời Epic, đã nhắc tôi tự hỏi; Tôi có thể đo hiệu năng của một ứng dụng đang chạy trong Windows về các lỗi dự đoán nhánh CPU của nó không? Tôi biết rằng một số công cụ phân tích tĩnh tồn tại, có thể giúp tối ưu hóa mã cho hiệu suất tốt trong các tình huống dự đoán nhánh và kỹ thuật thủ công có thể giúp đơn giản bằng cách thực hiện thay đổi và thử lại, nhưng tôi đang tìm một số cơ chế tự động có thể báo cáo tổng số thất bại dự đoán chi nhánh, trong một khoảng thời gian, khi một ứng dụng Windows chạy, và tôi hy vọng rằng một số công cụ Profiler cho Visual C++ có thể giúp tôi. Vì lợi ích của câu hỏi này, ứng dụng được đề cập hoặc được xây dựng với trình biên dịch tự nhiên như Visual C++ cho Windows, hoặc sử dụng một số trình biên dịch gốc khác, chẳng hạn như GCC, FreePascal, Delphi hoặc TurboAssembler. Quay lại đầu trang |||| Tệp thực thi có thể không có bất kỳ thông tin gỡ lỗi nào cả. Tôi muốn biết nếu tôi có thể phát hiện và đếm các lỗi dự đoán nhánh, có thể bằng cách đọc thông tin CPU bên trong thông qua một số dịch vụ Windows như WMI hoặc có thể chạy hoàn toàn bên trong môi trường ảo hóa đang chạy Windows, chẳng hạn như sử dụng VirtualBox, và sau đó chạy hoàn toàn môi trường cửa sổ ảo hóa với ứng dụng thử nghiệm của tôi, bên trong VirtualBox và thực hiện phân tích thời gian chạy của CPU ảo. Hoặc một số kỹ thuật khác mà tôi không biết, do đó câu hỏi này.Tôi có thể đo lường các lỗi dự đoán nhánh trên CPU Intel Core hiện đại không?
Có, tôi đã googled. Điều duy nhất có vẻ hứa hẹn là this PDF từ AMD. Trang 18 đề cập đến điều gì đó rất gần với những gì tôi muốn làm, nhưng dường như được viết cho những người làm việc mà không có bất kỳ hệ điều hành nào, trên nền tảng phần cứng đánh giá thô:
5.1. Chi nhánh. Khả năng ứng dụng. Các sai lầm chi nhánh có điều kiện có thể là một vấn đề quan trọng trong mã với rất nhiều logic ra quyết định.
Chi nhánh có điều kiện có thể bị sai lệch khi khả năng chọn đường dẫn đúng hoặc sai là ngẫu nhiên hoặc gần phân chia 50-50. Phần cứng dự đoán chi tiết không thể "tìm hiểu" mẫu và cành là không được dự đoán chính xác. Bộ sưu tập. Thu thập các sự kiện trong bảng này để đo hiệu suất dự đoán rẽ nhánh:
Chi nhánh Tính tốc độ mà các chi nhánh là thực hiện và tỷ số giữa số hướng dẫn cho mỗi chi nhánh sử dụng các công thức: Chi nhánh tốc độ chụp = Taken_branches/ Ret_instructions Chi nhánh tỷ lệ lấy = Taken_branches/Chi nhánh
dẫn mỗi chi nhánh = Ret_instructions/Chi nhánh
cập nhật: tôi đoán tôi có thể nói rằng tôi đang tìm kiếm một cách để đọc các mô-đun i7 PMU Intel Core, hoặc các chức năng tương đương khác CPU. Dường như Intel VTUNE (từ các bình luận của Adrian) rất gần với những gì tôi yêu cầu.
Tôi không đủ tự tin để đặt điều này trong một câu trả lời, nhưng tôi nghĩ VTune của Intel sẽ có thể cho bạn biết về những dự đoán chi nhánh nhỡ, ít nhất là nếu bạn đang profiling trên bộ xử lý Intel. –
Điều này? (http://software.intel.com/en-us/articles/intel-vtune-amplifier-xe/) - wow. Trông ấn tượng. Đối với chỉ một PMU-reader, có vẻ như cũng có THIS này: http://software.intel.com/en-us/articles/intel-performance-counter-monitor/ –
@Adrian McCarthy: với kiến thức của tôi là đúng. vTune khá ấn tượng, mặc dù không tốn kém. Thật không may là giới hạn cho CPU Intel có thể là một vấn đề trong nhiều trường hợp sử dụng. – 0xC0000022L