Можно ли измерить ошибки предсказания ветвления -на современном процессоре Intel Core?

Этот вопрос и ответ на него, который недавно был помечен как эпический ответ, побудили меня задуматься; Могу ли я измерить производительность работающего приложения в Windows с точки зрения ошибок прогнозирования ветвей ЦП? Я знаю, что существуют некоторые инструменты статического анализа, которые могут помочь в оптимизации кода для обеспечения хорошей производительности в ситуациях предсказания ветвлений -, и что ручные методы могут помочь, просто внося изменения и повторно -тестируя, но я ищу некоторые автоматический механизм, который может сообщать об общем количестве сбоев прогнозирования ветвления за определенный период времени при запуске приложения Windows, и я надеюсь, что какой-нибудь инструмент Profiler для Visual C++ может мне помочь.

Ради этого вопроса рассматриваемое приложение либо создано с помощью собственного компилятора -, такого как Visual C++ для Windows, либо с использованием какого-либо другого собственного компилятора, такого как GCC, FreePascal, Delphi или TurboAssembler. Исполняемый файл может вообще не иметь никакой отладочной информации. Я хочу знать, могу ли я обнаруживать и подсчитывать ошибки прогнозирования ветвлений, возможно, путем считывания внутренней информации ЦП через какую-либо службу Windows, такую ​​как WMI, или, возможно, запустив полностью в виртуализированной среде под управлением Windows, например, используя VirtualBox, а затем полностью запустив виртуализированной среде Windows с моим тестовым приложением внутри VirtualBox и выполнением анализа виртуального процессора во время выполнения. Или какой-то другой метод, о котором я не знаю, поэтому этот вопрос.

Да, я гуглил. Единственное, что выглядит многообещающе, — это этот PDF-файл от AMD. На странице 18 упоминается что-то очень близкое к тому, что я хотел бы сделать, но, кажется, написано для тех, кто работает без какой-либо операционной системы,на аппаратных платформах необработанной оценки:

5.1. Branches. Applicability. Conditional branch mispredictions may be a significant issue in code with a lot of decision-making logic.

Conditional branches may be mispredicted when the likelihood of choosing the true or false path is random or near a 50-50 split. The branch prediction hardware cannot "learn" a pattern and branches are not predicted correctly. Collection. Collect the events in this table to measure branch prediction performance:

Branches Compute the rate at which branches are taken and the ratio of the number of instructions per branch using these formulas: Branch taken rate = Taken_branches / Ret_instructions Branch taken ratio = Taken_branches / Branches
Instructions per branch = Ret_instructions / Branches

Обновление :Думаю, я мог бы сказать, что ищу способ прочитать модуль Intel Core i7 PMU или эквивалентные функции других процессоров. Похоже, что Intel VTUNE (из комментариев Адриана )очень близок к тому, что я просил.

17
задан Community 23 May 2017 в 11:47
поделиться