ПРАКТИКА РОБОТИ З АРХІТЕКТУРНИМ СИМУЛЯТОРОМ WinMIPS64

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2012
Тип роботи:
Лабораторна робота
Предмет:
Інші

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет “Львівська політехніка” Кафедра ЕОМ Лабораторна робота №1 ПРАКТИКА РОБОТИ З АРХІТЕКТУРНИМ СИМУЛЯТОРОМ WinMIPS64 Мета виконання роботи : навчитися користуванню симулятором WinMIPS64 машини з 64-розрядною RISC архітектурою MIPS64. Симулятор використовує операційну систему Windows. 1. Запуск і конфігурування симулятора WinMIPS64 Симулятор WinMIPS64 стартують за правилами Windows. Основне вікно симулятора містить шість дочірних вікон і ще статусну лінію під ними. Дочірні вікна отримали назви Pipeline, Code, Data, Registers, Statistics і ще вікно часових діаграм (Clock Cycles Diagram).  Рис. 2 – Основне і шість дочірних вікон симулятора WinMIPS64 (завантажено програму sum.s) Далі подамо назви і пояснимо призначення дочірніх вікон симулятора. Таблиця 1 – Дочірні вікна симулятора WinMIPS64 Pipeline window ( вікно конвеєра інструкцій, five pipeline stages : 1. IF – instruction fetch from instruction memory, 2. ID – instruction decoding/operand fetch, 3. EX – execute, 4. MEM – to/from data memory, 5. WB – write back to registers file) Вікно містить “схематичне” подання п’ятисходинкового конвеєра інструкцій 64-розрядного процесора MIPS64 разом з апаратними секціями виконання операцій рухомої коми, а саме, додавання/віднімання (addition/subtraction) множення (multiplication) і ділення (division). Рухоме ділення не конвеєризоване.Це вікно показує, на якій сходинці конвеєра знаходиться та чи інша інструкція. Вікно може збільшуватися.  Code window (вікно коду) Вікно виконує триколонкове подання пам’яті інструкцій, а саме, (зліва направо): адреса байта, 32-бітову машинну інструкцію, асемблерну інструкцію. Подвійний лівий щиголь мишею на певній інструкції встановлює/знімає точку зупинки.  Продовження таблиці 1 Data window (вікно даних)  Це вікно показує вмістиме пам’яті даних,. Ясно, що адресування комірок виконується побайтне, проте у вікні вмістиме подане 64-бітовими пакетами, тобто так, як це вмістиме сприймає 64-розрядний процесор. Аби відредагувати певні дані, треба зробити на них подвійний лівий щиголь мешею (double-left-click). Аби побачити і відрегувати дані з рухомою комою, треба виконати подвійний правий щиголь (double-right-click).  Register window (регістрове вікно)  Вікно подає вмістиме регістрів. Коли вмістиме регістрів подають сірим кольором, тоді вмістиме цих регістрів змінюється під дією програми, що симулюється. Коли вмістиме регістру подається кольором, тоді цей колір відповідає кольору сходинки конвеєра, де знаходится відповідна інструкція за умови, що з цієї сходинки є можливим так зване випередження (forwarding). Це вікно дозволяє інтерактивну зміну вмістимого будь-якого регістру, тобто, залежно від контексту, зміну коду 64-бітового цілого або рухомого числа, що в поточний момент містить регістр. Останнє можливе лише за умови, що обраний регістр не знаходиться в процесі програмної зміни вмістимого і його вмістиме не має не використовуватися для випередження даними. Аби змінити вмістиме регістра на ньому треба зробити подвійний лівий щиголь (double-left-click on the register). З’явиться модальне спливаюче вікно. Треба натиснути OK, аби записати до регістру 64-бітове гексадецимальне 0х0000000000000777.  Clock Cycle diagram (вікно часової діаграми) Вікно містить часову поведінку конвеєра, що знаходиться під дією поточної програми, що симулюється. Воно фіксує історію кожної інструкції. Коли певна інструкція спричиняє пригальмування конвеєра, тоді її символьне подання в лівій частині циклового вінка міняє колір з чорного на синій. Інструкції, що споживають результат пригальмованої інструкції змінюють колірність на сіру.  Statistics (вікно статистики) Саме це вікно є найважливішим, адже воно накопичує результати виконання кожної лабораторної роботи з дослідження ефективності RISC архітектури. Вікно подає накопичені і поточні статистики програми, що симулюється, а саме, число циклів (тактових інтервалів) на симуляцію ( number of simulation cycles), число виконаних за ці цикли інструкцій, середнє число циклів на одну інструкцію ( average Cycles Per Instruction, тобто CPI), типи затримок (stalls) і числа виконаних особливих інструкцій, а саме, умовних переходів (conditional branches) і інструкцій завантаження / збереження (Load/Store).   Status Line (стан симулятора) Статусна лінія на низу основного вікна симулятора нормально видає повідомлення "Ready", проте протягом симулювання подає різну корисну користувачеві інформацію щодо поточного стану процесу симулювання.  Зауважимо, що числові результати обчислень за програмним кодом для нас є другорядними в порівнянні з аналізом обчислених симулятором статистик просимульованої програми. Аби привести симулятор до початкового (стартового) стану перед симулюванням програми спочатку скидають симулятор через пункт меню File щиголем миші по Reset MIPS64. Потім, як треба, конфігурують симулятор (тобто віртуальну апаратну частину) через вибирання числених опції функціонування цієї апаратури. Можна змінювати струкуктуру і час виконання рухомих операцій на конвеєрі, місткість пам’яті коду/даних. Аби зробити це чи побачити стандартні призначення архітектури викликати наступне вікно. Рис. 3 – Модальне вікно конфігурування апаратної архітектури: місткість пам’ятi коду і пам’ятi даних, затримки виконання рухомих (FP) операцій Latency – прихована затримка виконання, ніби “інкубаційний період хвороби”. В останньому вікні зафіксовано розрядності (і відповідно, місткість) пам’яті даних і пам’яті програм. В нас вони дорівнюють 210 = 1024 = 1К 32-х розрядних машинних інструкцій і 210 = 1024 = 1К байтів даних. (Приховані) затримки виконання операцій рухомої коми (FP)складають 4 цикли (тактові інтервали) для рухомого додавання/віднімання (4 сходинки числового конвеєра додавання/віднімання), 7 циклів для рухомого множення (7 сходинок ще одного, паралельного до конвеєра додавання/віднімання, числового конвеєра множення) і 24 цикли для неконвеєрного пристрою ділення кодів з рухомою комою. Всі операції для фіксованої коми виконуються за один цикл, тобто, не мають латентних (прихованих) затримок. Будь-які зміни архітектури спричинюють скид симулятора! Достатися до цього модального вікна можна через меню Configure/Architecture (читати так: “клікнути” на пункті меню Configure; щиголь відкриє ще одне меню, де треба щигольнути пункт Architecture). Ще три опції можна вибрати через пункт меню Configuration, а саме, Multi-Step (декілька кроків одним натиском), Enable Forwarding (дозволити випередження) і Enable Delay Slot (дозволити слот затримки переходу), Рис.4 – Опції: пункт меню головного вікна “Конфігурування”(дозволене лише випередження) тобто, завжди виконуватиметься інструкція за інструкцією умовного переходу, незалежно від того, зроблено (taken) перехід чи не зроблено (not taken). Коли опцію обрано, поруч з нею з’являється сіра “гава”. 2. Завантаження програми Користуйтеся стандартним редактором NotePad, аби створити програмний файл, наприклад, sum.s. Ця програма містить код для MIPS64, що вираховує суму двох цілих чисел A і B. Числові коди спочатку вибрати з комірок пам’яті за адресами А і В до регістрів, потім додати на регістрах і, нарешті, записати отриману суму до комірки пам’яті за адресою С. Далі йде текст асемблерної програми. ;*** winMIPS64 //sum.s// C=A+B ***** ;*** (c) 2003 CA226, DCU ***** .data A: .word 10 B: .word 8 C: .word 0 .text main: ld r4,A(r0) ld r5,B(r0) dadd r3,r4,r5 sd r3,C(r0) halt Зауважимо, що невеличка за розміром утиліта asm.exe дозволяє ще до симулювання перевірити синтаксис програми, що мають симулювати. Аби перевірити синтаксис потрібно виконати команду операційної системи: C:\winmips64> asm sum.s Результат побачимо на дисплеї. Коли виконати C:\winmips64> asm sum.s > report.txt тоді результат вміщуватиме не екран, а файл report.txt, вмістиме якого для програми sum.s зараз і подамо. Pass 1 completed with 0 errors ;*************************************** ;*** winMIPS64 //sum.s// C=A+B ***** ;*** (c) 2003 CA226, DCU ***** ;*************************************** 00000000 .data 00000000 000000000000000a A: .word 10 00000008 0000000000000008 B: .word 8 00000010 0000000000000000 C: .word 0 00000000 .text 00000000 main: 00000000 dc040000 ld r4,A(r0) 00000004 dc050008 ld r5,B(r0) 00000008 0085182c dadd r3,r4,r5 0000000c fc030010 sd r3,C(r0) 00000010 04000000 halt Pass 2 completed with 0 errors Code Symbol Table main = 00000000 Data Symbol Table A = 00000000 B = 00000008 C = 00000010 До старту симуляції, потрібно завантажити до пам’яті симулятора синтаксично перевірену програму. Це виконують через меню File/Open. По завершенню можна побачити оновлене вмістиме вікон коду і даних (останнє, коли програма містить дані або розміщує результати в пам’яті. Нагорі вікна симулятора з’являється рядок зі шляхом до програми, в нас – до програми sum.s. Аби завантажити програмний файл до симулятора WinMIPS64 потрібно виконати наступне: Сlick on sum.s. Click the Open button Тепер програма завантажена до пам’яті і симулятор готовий до функціонування. Коди спостерігають у вікні кодів. Першозначення і зміни вмістимого комірок і регістрів спостерігають через вікна даних і регістрів. 3. Симулювання 3.1 Покрокове симулювання. В будь-якому стані симулятора натисни F10, аби розпочати новий цикл симулювання. Зауважимо, що на старті перша кольорова лінія в вікні Code з адресою 0х0000 (0000) забарвлена жовтим. Сходинка конвеєра IF у вікні Pipeline також забарвлена жовтим і містить асемблерну мнемоніку першої інструкції програми. Поглянемо до кодового вікна Code I знайдемо там першу інструкцію ld r4,A(r0). У вікні Data можна знайти програмну змінну A.  Рис. – Головне вікно симулятора з завантаженою програмою sum.s, стан – до початку виконання Clock 1 Натиснути Execute/Single Cycle (або натиснути F7). Симулятор виконає перший цикл (тактовий інтервал) програми. Увага! Не першу інструкцію, а лише перший цикл, що для п’яти сходинкового конвеєра відповідає виконанню 1/5 першої інструкції в найкращому випадку, коли нема вимушених затримок конвеєра. Зауважимо, що абревіатура MIPS відповідає в українському перекладі “мікропроцесору, що немає затримок конвеєра”, а не “мільону операцій на секунду”. У вікні Code колірність першої інструкції змінюється на блакитну і вже друга інструкція забарвлена жовтим. Таке забарвлення вказує на сходинку конвеєра, де знаходиться відповідно забарвлена інструкція: жовтий для IF (вибирання інструкції з пам’яті інструкцій, точніше з кеша інструкцій), блакитний для ID(декодув. інструкції і вибирання операндів безпосередніх і з регістр. файла), червоний для EX(викон. інструкції,1 такт для фіксов. кодів і більше тактів для рухомих кодів), зелений для MEM (запис/читання до/з комірок пам’яті даних), пурпурний для WB (запис результату до регістру регістрового файлу). Коли подивитися на сходинку конвеєра IF у вікні Pipeline , можна побачити, що друга інструкція програми ld r5, B(r0) з’явилася на цій, в той час, як перша інструкція ld r4,A(r0) пересунулася на другу сходинку ID конвеєра. Конвеєр розпочав функціонування. Clock 2 Наступний натиск на F7 змінює забарвленість в вікні Code через уведення червоного коліру для третьої сходинки EX конвеєра. До конвеєра увійшла інструкція dadd r3,r4,r5. Clock 3 Третій натиск на F7 aзнову змінює колірність вікна Code, iуводячи зелену забарвленість для четвертої сходинки MEM конвеєра. До конвеєру входить інструкція sd r3,C(r0). У вікні Cycle бачимо історію виконання кожної інструкції програми, тобто сходинку, на якій знаходиться кожна інструкція перед надсиланням чергового тактового імпульса. Clock 4 Знову натискаємо F7. Кожна сходинка конвеєра отримує нову інструкцію. Регістр r4 має завантажуватися з комірки пам’яті даних. Проте оновлене вмістиме регістра можна отримати завчасно (кажуть – з випередженням в часі, прямо з виходу пам’яті даних, тобто, з виходу сходинки МЕМ (for forwarding from the MEM stage)). Отже, прямо з виходу пам’яті забираємо новий, ще не записаний до регістру призначення операнд т(це і є випередження), а далі паралельно виконуємо додавання цього нового операнду і в той самий час пишемо цей операнд до регістру регістрового файлу. Добре, що в конвеєрі водночас знаходиться черга з п’ятьох інструкцій, тобто, всі ці інструкції є «під рукою». Можна бачити, що r4 забарвлюється зеленим (колір сходинки MEM) у вікні Registers. Зауважимо, що остання інструкція програми halt (симулятор не має навіть примітивної програми монітора, що вже казати про операційну систему; отже, програміст мусить вручну гальмувати виконання програми саме такою інструкцією) вже уведена до конвеєра. Clock 5 Натискаємо F7. Тут відбуваються цікаві події. The value destined for r5 becomes available for forwarding. However the value for r5 was not available in time for the dadd r3,r4,r5 instruction to execute in EX. So it remains in EX, stalled. The status line reads "RAW stall in EX (R5)", indicating where the stall occurred, and which register's unavailability was responsible for it.  Рис. – П’ятий такт виконання програми. Статус: відбулося пригальмування RAW (read after write) Фігури в вікнах Clock Cycle Diagram і Pipeline чітко вказують на те, що інструкція dadd “застрягла” в сходинці EX, і що всі інструкції за нею також неспроможні пересуватися конвеєром далі. У вікні Clock Cycle Diagram інструкцію dadd підсвічено блакитним, а інструкції, що розташовані за нею “посіріли”. Clock 6 Натискаємо F7. Інструкція dadd r3,r4,r5 instruction нарешті виконується, а щойно отримана сума, призначена для запису до r3, паралельно стає досяжною для виконання випередження (зі сходинки execute). Отримано значення 0х12, що є сумою 10+8 = 18 в десятковій. Це і є відповідь програми, а нас більше цікавить не ця відповідь, а часові витрати на виконання програми (вимірюємо числом тактових імпульсів) і скорочення цього часу різними методами. Щойно зауважене і є предметом курсу з архітектури комп’ютера. Clock 7 Натискаємо F7. Інструкція halt, вже уведена до конвеєра, спричинює ефект “закриття” конвеєра. По ній вже жодна інша інструкція не уводиться до конвеєра, а сам конвеєр поступово спорожнюється, він сходинки IF до сходинки WB. Clock 8 Натискаємо F7. Перевіряємо пам’ять даних Data , де фіксуємо, що змінна C набула значення 0х12. Інструкція sd r3,C(r0) записала це значення до пам’яті на сходинці MEM конвеєра, використовуючі випереджені дані з виходу IF, які вже нормально, без випередження записуються до регістра r3. Clock 9 Натискаємо F7. Clock 10 Натискаємо F7. Програма фінішує.  Рис. – Дозвіл випередження ще до виконання програми sum.s Зараз проаналізуємо вмістиме вікна статистики (Statistics) і зауважимо, що зафіксовано 2 loads та 1 store. Це є “тяжкі” інструкції. Ще ми мали 1 пригальмування RAW. Витратили 10 тактових циклів на виконання п’ятьох інструкцій. Значить, отримали середнє число тактових імпульсів CPI=2 на одну інструкцію. Це в два рази гірше від ідеала і є де вдосконалюватися. Проте, навіть отримане є добрим результатом.  Рис. – Головне вікно симулятора по завершенню виконання програми sum.s Вмістиме вікна статистики негайно відгукується на будь-які зміни в архітектурі. Дослідимо негативний вплив на продуктивність заборони випередження (що є наслідком спрощення апаратної частини, а дешеве не буває оптимальним). Який час нам знадобиться без використання випередження? Аби дізнатися це активуємо Configure. Для заборони випередження (forwarding) треба “клікнути” на Enable Forwarding (гава дозволу має зникнути).  Рис. – Заборона випередження По виконанню нашої програми, але вже без випередження,з проаналізуємо вмістиме вікна статистики (Statistics). Зауважимо, що маємо 2 loads та 1 store і аж 4 пригальмування класу RAW (додатково втрачено 4-1=3 такти). Отже програма “з’їла” 10+3=13 тактових циклів на виконання п’ятьох інструкцій, а середнє число тактів на виконання інструкції погіршилося і становить CPI=2.600. Отже, продуктивність спрощеної версії процесора є нижчою.  Рис. – Головне вікно симулятора по завершенню виконання програми sum.s без використання випередження Repeat the cycle-by-cycle program execution, re-examine the Statistics window and compare the results. Note that there are more stalls as instructions are held up in ID waiting for a register, and hence waiting for an earlier instruction to complete WB. The advantages of forwarding should be obvious. 3.2. Інші режими симулювання. Активуємо File/Reset MIPS64. Коли натиснути File/Full Reset, тоді ми спорожнимо пам’ять, але можемо повторно завантажити ту чи іншу програму. Натиском на File/Reload чи на F10 можна рестартувати симуляцію. За один крок можна виконувати більше від одного такту. Аби зробити це, викликають Execute/Multi cycle... Число виконаних одним натиском тактів змінюють через Configure/Multi-step. Повне виконання програми спричинює натиск на F4 або ж на Execute/Run to. Можна скористуватися точками зупинки. Спочатку натиснемо на F10. Аби встановити/зняти точки зупинки, зробимо лівий подвійний щиголь мишею, наприклад на інструкції dadd r3,r4,r5. Далі натиснемо на F4. Програма розпочне виконуватися в автоматичному режимі і загальмується. Коли розпочнеться фаза (сходинка) IF позначеної інструкції подвійного додавання. Ще один подвійний щиголь на тій самій інструкції знімає точку зупинки.
Антиботан аватар за замовчуванням

30.04.2013 23:04-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!