Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Завантаження тестових програм

ВСТУП

Основний варіант DLX процесора (вимовляють як "делюкс") є конвеєрним. Симулятор цього процесора з назвою WinDLX створено студентами Віденського університету. Симулятор доцільно використовувати як наочний посібник до підручника американських викладачів-науковців, засновників RISC-архітектури, а саме:

J. Hennessy and D. Patterson. Computer Architecture. A quantitative approach.

- MKPublishing, CA, 1996.

Надана далі інформація з використання симулятора є нескладною. Але з її допомогою можна виконати перші кроки, тобто коротенькі програми DLX та опанувати методологію користування симулятором. Зауважимо, що симулятор надає контекстно-залежну допомогу у скрутних випадках, яка активується натисканням клавіші F1.

Увага! Спроможність симулятора оперувати з вкладеними каталогами є обмеженою, тому він, наприклад, відмовляється функціонувати на третьому і більших рівнях вкладеності. Отже, розміщуйте симулятор і програми ближче до кореня дерева директорій!

СИМУЛЯТОР WinDLX

Реальний процесор фірми MIPS, що з певним наближенням симулюється програмою WinDLX, містить процесор фіксованої коми (центральний процесорний вузол, CPU) разом із певними сопроцесорами, що виконують допоміжні або службові функції, наприклад, обробку в форматі рухомої коми, або ж керування пам'яттю і вводом-виводом (див. Рис.1). Наш симулятор симулює центральний процесорний вузол і лише один сопроцесор, а саме, сопроцесор 1, що є вузлом обробки форматів рухомої коми. Сопроцесор 0 обслуговує виключні ситуації, що виникають під час виконання програми (наприклад, ділення на нуль, переповнення тощо), переривання, що дозволяють апаратним засобам реагувати на асинхронні події і на події в системі віртуальної пам'яті.

Рис. 1 - Процесор MIPS R2000, CPU і FPU

 

На Рис.1:

Cause - причина (джерело) переривання (виключення),

EPC - допоміжний лічильник інструкцій, що зберігає адресу перерваної програми,

BadVAddr - некоректне значення адреси комірки пам'яті, Status - стан,

trap - пастка (для запуску тих системних програм, що опрацьовують ситуації виключення і переривання),

Lo - молодша частина, Hi - старша частина (результату множення/ ділення).

В подальшому для ознайомлення з функціонуванням симулятора використовується асемблерна програма, яку містить файл FACT.S. Програма обраховує факторіал цілого числа, яке треба уводити з клавіатури після запуску симулятора. Для вводу числа разом із цією асемблерною програмою використовують допоміжну асемблерну програма вводу. Її містить файл INPUT.S. Зауважимо, що розширення s в назві файлів відповідає асемблерним програмам.

1.1 Запуск та конфігурування

WinDLX стартує як звичайна Windows-програма (мінімально - ОС Win95). При цьому відчиняється головне вікно з шістьма іконками, що є зменшеними дочірніми вікнами. Подвійним щиголем миші на будь-якій іконці перетворюємо її на звичайне вікно.

Симулятор має приводитися до першостану (скидатися) натисканням клавіши миші, коли її курсор вказуе на опцію Reset all у пункті File меню головного вікна.

При цьому з'являється модальне вікно "Reset DLX" window", підтвердження пункту OK, аби зачинитися.

WinDLX спроможний функціонувати в декількох конфігураціях. Проте від початку роботи з симулятором важливо переконатися у його стандартному конфігуруванні, а коли треба, тоді поновити таке конфігурування. Для цього викликають пункт меню Configuration / Floating Point Stages і переконуються про встановлення наступних значень кодів конфігурування "апаратних" засобів (коли потрібно, тоді виправляють значення кодів на надані нижче значення).

  Count Delay:
Addition Units    
Multiplication    
Units    
Division Units    

На завершення натисканням мишею на OK зачиняють відчинене модальне вікно. Наступним кроком за допомогою пункту меню головного вікна Configuration / Memory Size, визначають місткість пам'яті як 0х8000 та вже відомим способом виходять з цього модального вікна.

Можна користуватися трьома іншими опціями меню Configuration, а саме - Symbolic addresses, Absolute Cycle Count та Enable Forwarding.

Завантаження тестових програм

На початку симуляції до WinDLX потрібно завантажити програми, що симулюються. Це виконують за допомогою пункту меню File / Load Code or Data. Вибирання цього пункту мишею викликає нове вікно, що містить файли із розширенням *.S. Саме ці файли завантажують до симулятора. Нагадаємо, що програма fact.s вираховує значення факторіалу цілого числа. Допоміжна програма. input.s містить процедуру читання стандартного вводу (the keyboard) та зберігає отримане ціле число в регістрі загального призначення (the general purpose register) r1 DLX процесора.

Для завантаження цих двох файлів до пам'яті симулятора потрібні наступні кроки:

- позначити мишею файл fact.s,

- натиснути мишею кнопку selec t,

- позначити мишею файл input.s,

- натиснути мишею кнопку select,

- натиснути мишею кнопку load.

Послідовність натискання позначок екрану є суттєвою у визначенні коректної послідовності завантаження файлів-програм до пам'яті симулятора. Опрацювання повідомлення File(s) loaded successfully. Reset DLX? виконують натисканням клавіші OK. Після цього файли рахуються завантаженими до пам'яті симулятора. Стартові роботи завершено. Симулятор готовий до виконання програм.

Симулювання

В головному вікні симулятора бачимо шість іконок, які відповідають наступним робочим і допоміжним вікнам "Register", "Code", "Pipeline", "Clock Cycle Diagram", "Statistics" and "Breakpoints". Натискання мишкою на кожній іконці перетворює її на відчинене вікно. Далі розглядаються призначення і функції цих вікон.

1.3.1 Конвеєрне вікно (Pipeline window)

Унаочнимо внутрішню структуру конвейєра DLX процесора. Зробимо клавішею миші щиголь на іконці Pipeline. Виникне дочірнє вікно, що подає класичний п'яти сходинковий конвейєр DLX зі сходинками IF, ID, EX, MEM, WB. Отримане вікно бажано зробити ширшим, аби бачити послідовність опрацювання конвейєром стандартних і нестандартних (за часовими витратами) машинних інструкцій.

Наведений вище рисунок відтворює конвеєр DLX процесора з додатковими вузлами виконання операцій рухомої коми, а саме, рухомі addition / subtraction, multiplication плюс ціле division.

 

1.3.2 Кодове вікно (Code window)

Наступне вікно має назву Code window. Подвійним натисканням на його іконці можна викликати інформацію про стан пам'яті симулятора, де в межах одного рядка відтворене наступне:

- адресу (символьно чи чисельно);

- гексадецимальний машинний код інструкції;

- саму інструкцію, записану асемблерною мовою.

$TEXT 0x20011000 addi r1, r0, 0x1000
Main+4 0x0c00003c jal InpUnSigned

Аби розпочати симулювання, треба викликати Execution з меню головного вікна. Результатом є поява нового меню типу pull down. Далі робимо натискання на підфункції Single Cycle. Значно спрощує справу еквівалентне за дією натискання клавіші F7 на клавіатурі, що також спричинює один крок симуляції. Перше натискання F7 підсвічує у кодовому вікні лінію з адресою $TEXT жовтим кольором. Наступне натискання F7 викликає другий крок симулювання і змінює підсвічування першої лінії на помаранчовий колір, тоді як друга лінія отримує жовте підсвічування. Тут кольором відмічають процес просування інструкцій конвеєром DLX. Коли вікно Pipeline виявилося зачиненим, його треба відчинити подвійним натисканням на відповідній іконці. Якщо це вікно є недостатньо довгим і "приховує" частину лінії, яка відповідає за графічне подання часових витрат на виконання інструкції, тоді мишкою подовжують це вікно в горизонтальному напрямку, аби побачити, що інструкція jal InputUnsigned розташована на сходинці IF тоді, як її попередник інструкція addi r1, r0, 0x1000 пересунулася вже на другу сходинку конвеєра, а саме, на ID. Інші блоки, позначені хрестом, свідчать про те, що на відповідних їм сходинках конвейєра інструкція не викликала жодних дій.

Наступний натиск F7 змінює кольорове забарвлення кодового вікна, а саме, додається червоний колір, що свідчить про роботу третьої сходинки конвеєра з назвою intEX. Ще одне натискання F7 змінює кольорове забарвлення в цілому. Жовта лінія з'являється нижче і, ймовірно, є лише єдиною забарвленою лінією у вікні. Перегляд конвеєрного вікна інформує про те, що сходинки конвеєра IF, intEX та MEM задіяні, а сходинка ID не задіяна. Чому?

1.3.3 Циклове вікно (Clock Cycle window)

Інші вікна надають додаткову інформацію про роботу конвеєра. Від моменту старту вони знаходяться у зменшеному стані, тобто виглядають як іконки. Розгортання іконок виконують натисканням мишою за умови, що курсор знаходиться у відповідному місці головного (батьківського) вікна.

Бачимо, що симуляція знаходиться на четвертому циклі. Перша інструкція (машинна команда) опрацьовується на сходинці MEM конвеєра, друга інструкція - на сходинці intEX (integer EX), третя - анульована, а четверта - на вхідній сходинці IF. Щодо третьої інструкції, то зауважимо наступне. Вона завантажилася до конвеєра "поза законом", за "інерцією", завдяки тому, що її попередником виявилася інструкція безумовного переходу. Анулювання третьої інструкції спричинило, як кажуть, бульбашку ("bubble") на конвеєрі (марнування часового інтервалу замість його корисного використання).

Цільова адреса переходу jal має назву "InputUnsigned". Аби визначити конкретне чисельне значення, що відповідає символічному запису адреси, треба викликати опцію Memory з меню головного вікна, а потім - опцію Symbols. Тоді побачимо відповідність символічного і чисельного запису нашої і інших адрес. Отримані значення відповідності можна сортувати за назвами або за чисельними значеннями. Символ "G" після значення адреси позначає глобальну цільову адресу, а символ '^"-локальну. Цільова адреса "InputUnsigned" розташована в модулі "input", тому вона є глобальною. Завжди треба зачиняти викликане вікно натисканням на позначку ОК.

Натискання на F7 просуває першу інструкцію addi до останньої сходинки конвеєра. Що відбувається в середині конвеєра, можна зрозуміти за допомогою швидкого подвійного натискання мишею на тій лінії кодового вікна, де розташована інструкція addi. Натискання викликає нове вікно, що містить детальну інформацію про мікроподії на кожній сходинці конвеєра, які належать обраній інструкції. Нове вікно, що з'явилося, позначено як "Information about...". Зачиніть це вікно. Швидке подвійне натискання на лінії з інструкцією movi2fp надає інформацію лише про першу сходинку виконання цієї інструкції з тої причини, що її анулювала наступна інструкція jump. Зачиніть поточне вікно через ОК.

Інформаційне вікно викликають подвійним натисканням миші за умови, що її курсор розташовано або на лінії машинної інструкції в вікні коду, або десь на сходинках конвеєрного вікна.

 

1.3.4 Вікно точок зупинки (Breakpoint window)

Ми виконували код (програми) крок за кроком, натискаючи клавішу F7, і спостерігали за порядком вибирання інструкцій (команд) у кодовому (програмному) вікні. Зараз за допомогою кодового вікна побачимо, що треба виконати дві ідентичні інструкції збереження/завантаження (LW - Load Word, SW - Store Word), що завантажують 32-х бітові слова до регістрів. Проте число натисків на клавіші миши в режимі покрокового виконання є занадто великим. Це число можна зменшити через уведення точок зупинки.

Аби увести зупинку, позначимо лінію 0x0000015c в кодовому вікні, де міститься інструкція trap 0x5. Ця інструкція є системним викликом запису на екран. Пересунемо курсор миші на лінію в кодовому вікні з вказаною вище адресою та дамо щигля клавішею миші (колір лінії має інвертуватися). Потім натискаємо на напису Code в меню головного вікна. Оберемо опцію Set Breakpoint за допомогою одноразового натискання. Тут треба бути впевненим, що потрібна інструкція у кодовому вікні вже позначена інвертуванням кольору. Має виникнути нове вікно "Set Breakpoint". Це дозволяє вказати бажану сходинку конвейєра, де призупиниться виконання позначеної у кодовому вікні інструкції. Стандартно обирається сходинка ID. Аби припинити процес встановлення точки зупинки, натискаємо мишкою на OK. Вікно має зачинитися.

Зауважимо, що в кодовому вікні на позначеній нами лінії інвертування кольору зникло. Проте з'явилася позначка-покажчик на точку зупинки, а саме "ID" біля інструкції системного виклику trap 0x5. Ця позначка свідчить про те, що автоматичне виконання програми загальмується на позначеній інструкції на сходинці декодування.

Аби перевірити налаштування точки зупинки треба відчинити вікно Breakpoints. Це вікно містить опис нашої точки зупинки. Точку зупинки можна скасувати. Якщо натиснути мишкою на рядку опису точки, тоді в меню головного вікна має виникнути опція Breakpoints (коли є позначеною лінія з описом точки зупинки). І зараз можна скасувати призначений нами breakpoint. Найшвидший спосіб продовжити виконання нашої програми в автоматичному режимі - це натиснути клавішу F5. Існує стандартний спосіб, а саме, викликати мишкою пункт меню головного вікна Execution / Run чи спрощено - F5. За малий часовий інтервал виникне вікно, що інформує про виконання зупинки у призначеній точці, а саме, "ID-Stage: reached at Breakpoint #1"; це вікно треба зачинити підтвердженням мишею на OK.

Зараз звернемося до вікна Clock Cycle Diagram. Там побачимо, що симуляція призупинилася на циклі 14, а лінія trap 0x5 виглядає так:

Т-stall позначує пригальмування з причини виконання інструкції trap (пастка). Головний мотив, що унаочнено, полягає в скиданні конвеєра DLX за умови виконання trap-інструкції. Це не є найкращим способом перемикання на іншу системну програму з погляду збереження продуктивності. Проте так спрощується робота конвеєра і керування ним. Подію скидання (спорожнення) конвеєра фіксують в інформаційному вікні, що викликають подвійним щиглем умови розташування курсора мишки на рядку з інструкцією, поміченою точкою зупинки в кодовому вікні - "3 stall(s) because of Trap-Pipeline-Clearing!" in the IF stage". Обов'язково зачиніть це вікно щиглем на OK.

Інструкція trap 0x5 видає повідомлення на екран. Це можна перевірити, коли дати щигля на опції Execute / Display DLX-I/O у меню головного вікна. Ясно, що потім треба підтвердити OK у вікні, що відчинилося.

1.3.5 Регістрове вікно (Register window)

Ефективне використання симулятора пов'язане з регістровим вікном, яке можна відчинити відповідним натисканням миші. Спочатку в кодовому вікні перейдемо до лінії з адресою 0x00000194. Тут міститься інструкція

Lw r2, SaveR2(r0)

завантаження слова з комірки пам'яті з базовою адресою SaveR2 та зсувом, що міститься в регістрі r0

[ address = base + offset = SaveR2 + (r0) ],

до призначення, а саме, до регістра r2.

Треба позначити лінію з цією інструкцією точкою зупинки. Зробимо натискання на цій лінії та натиснимо клавішу Ins (це скорочений варіант вже відомого виклику послідовності Code / Set Breakpoint / OK). Ще одну точку зупинки треба поставити на лінії 0x000001a4 jar r31. Натиском F5 продовжимо виконання програми в автоматичному режимі. Сюрприз! Виникає вікно вводу/виводу, що має назву "The DLX-Standard-I/O window". У цьому вікні курсор миготить після повідомлення "An integer value >1:". Наберіть 20 і натисніть Enter. Симуляційне виконання нашої програми триватиме доти, доки не стане досяжною точка зупинки breakpoint # 2 (OK!).

Схема у вікні the clock cycle diagram window (відчиніть це вікно, якщо потрібно) містить щось нове, а саме, червоні і зелені стріли поміж інструкціями (якщо цього не видно, прокрутіть інформацію у вікні доки не побачите симуляційні цикли з номерами 52, 53, 54, 55 та 56). Червоні стріли позначають вимогу пригальмування конвейєра (stall). Причину пригальмування пояснює лінії, на яку вказує стріла. У випадку, що розглядається, маємо так званий R- Stalls, що виникає за рахунок RAW-небезпеки (Read After Write), а саме, порушення правила про те, що наступна інструкція не має права зчитувати значення операнда з цільового регістру ще до того, як його вмістиме поновлено результатом попередньої інструкції). Зелена стріла символізує використання випереджувального пересилання операнда, що потрібен наступній інструкції ще до того, як формально завершилося виконання цієї попередньої інструкції записом її результату до цільового регістру регістрового файлу.

Вже час перевірити вмістиме регістрів. Відчинемо вікно Register, що може існувати як ікона. В цьому вікні бачимо значення, що зберігаються у регістрах. Звернемо увагу на регістри від R1 до R5. Виконуючи ще один крок симуляції до наступної точки зупинки (F5, OK), бачимо, що деякі значення в регістрах змінилися. Пояснення цьому надає інструкція lw, що завантажує значення з пам'яті до регістрів

Можна виконувати симуляцію в інший спосіб, без використання точок зупинки. В меню головного вікна реалізуємо послідовність дій Execute / Multiple Cycles або одразу натискаємо F8. Виникне вікно, де треба набрати 17 та натиснути Enter. У цьому випадку симуляція триватиме 17 циклів, доки не зупиниться. Зупинка у випадку, що розглядається, не має за мету повне виконання програми обчислення факторіалу.

Зробимо скролінг у вікні the clock cycle diagram доти, доки не побачимо цикли з номерами від 72 до 78, як мінімум. Дві операції з рухомою комою (multd та subd - multiply/subtract double) виконуються на окремих вузлах на сходинці EX конвеєра. Але вони обидві вимагають на опрацювання операндів не одного, а декількох тактів. З вказаної причини наступна після них інструкція (j Fact.Loop) може вибиратися, декодуватися та виконуватися. Але потім повинна пригальмуватися на один цикл, аби дозволити інструкції subd завершити власну MEM-фазу.

1.3.6 Вікно статистики (Statistics window)

Лишилося розглянути останнє вікно обчислення статистик програм, що симулюються. Дозволимо програмі завершити виконання натиском клавіші F5. Побачимо повідомлення "Trap #0 occurred" (OK), що свідчить про завершення виконання програми з останньою інструкцією trap 0, яка виконалася в режимі симуляції. Пастка (Trap) з номером 0 не є визначеною. Її застосовують, аби припинити виконання будь-якої програми. Зачинемо усі вікна і відчинемо вікно Statistics.

Цим вікном надано інформацію про найбільш важливі архітектурні аспекти нашої програми. Іншими словами, все симулюється заради формування вмістимого вікна статистки, де головним є число тактових імпульсів, витрачених на виконання (симулювання) програми. У вікні вказано число використаних циклів (тактових інтервалів) на виконання програми (менше циклів - менший час на виконання, значить, більша продуктивність), конфігурацію апаратної частини, пригальмування (stalls, інакше, втрати циклів)) і причини виникнення пригальмувань, питому вагу тяжких, як для конвеєризації, інструкцій умовних переходів, завантаження і збереження, а також інструкцій з операціями рухомої коми і інструкцій-пасток (traps).

Стандартно, всі характеристики подано відсотками, наприклад, "RAW stalls: 17(7.91 % of all Cycles)".

Статистичні характеристики надзвичайно корисні у дослідженнях впливів зміни конфігурації апаратної частини на ефективність (продуктивність) RISC- машини.

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

Аби зробити це, занотуємо загальне число циклів (215) і число пригальмувань (stalls) -- 17 RAW, 25 Control, 12 Trap; 54 Total. Зачинимо вікно статистики та відчинемо вікно Configuration. Заборонимо випереджування (disable forwarding) натисканням на опції Enable Forwarding (видимий "гак" або "пташка" мають зникнути). На наступне повідомлення- запитання симулятора "WARNING: OK resets automatically the processor! Disable Forwarding?" треба відповісти OK. Знищимо усі точки зупинок за допомогою розділа меню Breakpoints, де задамо опцію Delete All і завершимо знищення стандартним натисканням на OK. Далі, викличемо одноразову симуляцію всієї програми послідовністю F5, 20 Enter і натиснемо OK, коли виконається trap 0. Новий перегляд вікна статистики повідомить про те, що число призупинок конвеєра типу Control stalls і Trap stalls лишилася незмінною, але число RAW stalls зросло від 17 до 53 (це погано!), що збільшило загальне число симуляційних циклів нашої програми до 236 (було 215). Отже, заборона випередження збільшила час виконання програми на 236 / 215 = 1.098.

Загальноприйнятим в теорії конвеєрних структур є така послідовність етапів:

· Вибірка (instruction fetch, IF) - завантаження нової команди з пам'яті

· Декодування (instruction decode, ID) - інтерпретація та відправка команди у відповідний операційний пристрій в залежності від різновиду операції

· Виконання (execution, EX) - виконання команд та обчислення ефективної адреси пам'яті для результату або операндів, які необхідно завантажити

· Звертання до пам'яті (memory, MEM) - виконання операцій з пам'яттю (для команд завантаження/збереження)

· Збереження результату (writeback, WB) - збереження результату обчислень в регістрі

ДОДАТОК. Таблиця інструкцій процесора

<== предыдущая лекция | следующая лекция ==>
Про проходження практики | КИЇВ - 2012 1. Пояснювальна записка


Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных