количество выполнений инструкции сборки x86 - PullRequest
3 голосов
/ 25 декабря 2010

Привет всем, у меня есть код, и я хочу узнать, сколько раз выполнялась каждая сборочная линия.Мне все равно, будь то через профилирование или эмуляцию, но я хочу получить результаты с высокой точностью.Однажды я наткнулся на форум, на котором был написан некоторый код сценария, но я потерял ссылку.Может ли кто-нибудь помочь мне подумать о некоторых способах сделать это?С уважением

Редактировать : Окей, я думаю, что я на полпути.Я провел некоторые исследования BTS (Branch Trace Store), представленные в Руководстве Intel 3A, раздел 16.4.5, согласно одному из сообщений.Эта функция предоставляет историю веток.Так что теперь мне нужна ваша помощь, чтобы найти, есть ли какие-либо скрипты с открытым исходным кодом или инструменты для этого.Ожидание, чтобы проверить ваш отзыв

ура =)!

Ответы [ 3 ]

1 голос
/ 25 декабря 2010

Один (хотя и медленный) метод - написать собственный отладчик. Затем он остановит точку входа вашей программы, и когда она будет нажата, она установит флаг трассировки для EFlags в контексте, так что она также будет работать с отладчиком в следующей инструкции. Затем вы можете использовать хэш-таблицу с EIP для подсчета количества попаданий. Единственная проблема заключается в том, что накладные расходы будут чрезмерными, и приложение будет работать очень медленно.

1 голос
/ 25 декабря 2010

Если ваш процессор поддерживает его, вы можете включить Branch Trace Store (BTS).BTS хранит журнал всех взятых ветвей в предопределенной области в памяти.Каждая запись содержит источник и пункт назначения.Используя это, вы можете подсчитать, сколько раз вы были в каждом сегменте кода.

Посмотрите том 3A в Руководстве разработчика программного обеспечения Intel , раздел 16.4.5в текущей редакции) для получения подробной информации о том, как включить его.

1 голос
/ 25 декабря 2010

Если вы не заботитесь о производительности, вы можете сделать небольшой трюк, чтобы посчитать это.Вызовите одноэтапное исключение, и после ввода вашего собственного обработчика seh поднимите еще одно и перейдите к следующей команде.

Возможно, некоторые инструменты профилирования, такие как pin или valgrind, сделают это для вас более простым способом.Я бы посоветовал вам взглянуть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...