русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Питомна година виконання


Дата додавання: 2014-10-07; переглядів: 856.


Якщо година виконання деякої крапки програми не постійно, а варіюється в тихнув або інших межах (наприклад, залежно від роду оброблюваних даних), те трактування результатів профілювання стає неоднозначної, а сам результат — ненадійним. Для більше достовірного аналізу потрібно: а) визначити чи дійсно в програмі присутні подібні "плаваючі" крапки й, якщо так, ті: б) визначити година їхнього виконання в кращому, гіршому й середньому випадках.

Далеко не всі профіліровщики мають здатність визначати питомий година виконання машинних команд (інша назва розтактовка). На щастя, профіліровщик VTune це вміє! Звернемося до сгенерованого їм протоколу динамічного аналізу. Бути може, він допоможе нам дозволити загадку "неповороткості" завантаження покажчика pswd?

Лістинг 1.4. Питомий година виконання машинних команд усередині профилируемого фрагмента програми

Line Instructions Dyn-Retirement Cycles
107 pswd[p] = '!';
mov edx, DWORD PTR [ebp+0ch]  
107; завантажити в регістр EDX покажчик pswd
add edx,DWORD PTR [ ebp-4]  
107; ^ скласти регістр EDX зі змінної p
mov BYTE PTR [edx], 021h  
107; записати в *(pswd+p) значення '!'
109 y = y | y << 8;
mov eax,DWORD PTR [ ebp-28]  
109; завантажити в регістр EAX змінну y
shl eax, 08h  
109; зрушити EAX на 8 позицій уліво
mov ecx, DWORD PTR [ ebp-28] (0,7.3,80)  
109; завантажити в регістр ECX змінну y
or ecx, eax  
109; ECX = ECX | EAX (tmp = y | y)
mov DWORD PTR [ ebp-28], ecx  
109; записати отриманий результат в y
110 x -= k;
mov edx, DWORD PTR [ ebp-24]  
110; завантажити в регістр EDX змінну x
sub edx, DWORD PTR [ ebp-36]  
110; відняти з регістра EDX змінну k
mov DWORD PTR [ ebp-24], edx  
110; записати отриманий результат в x

Ну, від знову, — всі команди, як команди, а завантаження покажчика pswd відбувається цілих тринадцять тактів, у тої година як інші вільно укладаються в один-два тактів, а деякі й зовсім займають нулів, маючи змогу завершитися одночасно з попередніми інструкціями.

За винятком команди, що завантажує вміст змінної y у регістр ECX, година виконання всіх інших команд строго постійно й не міняється година від години. Наша ж "підопічна" залежно від ще не з'ясованих обставин, може виконуватися навіть вісімдесят тактів, що на годину робить її самою "гарячою" крапкою даного фрагмента програми. Вісімдесят тактів — це взагалі повне свавілля! І пускай средній годину її виконання становить усього лише сім тактів, а мінімальне — і зовсім нуль, мі не заспокоїмося поки не з'ясуємо: на що й при яких саме обставинах іде така кількість тактів?


<== попередня лекція | наступна лекція ==>
Загальна година виконання | Інформація про пенальті


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн