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

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

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

Рік:
2023
Тип роботи:
Методичні вказівки до лабораторної роботи
Предмет:
Архітектура комп ютерних систем

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

C МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» Кафедра безпеки інформаційних технологій  ПРАКТИКА РОБОТИ З АРХІТЕКТУРНИМ СИМУЛЯТОРОМ WinMIPS64 МЕТОДИЧНІ ВКАЗІВКИ до лабораторної роботи № 1 з дисципліни «Архітектура комп'ютерних систем» для студентів спеціальності 125 «Кібербезпека» Львів 2023 Практика роботи з архітектурним симулятором WinMIPS64: методичні вказівки до виконання лабораторної роботи з дисципліни «Архітектура комп'ютерних систем» / Укл. Мельник В.А., Банах Р.І. – Львів, Національний університет «Львівська політехніка», 2022. – 18 с. Укладачі: Мельник В.А., д.т.н., професор, професор каф. БІТ, Банах Р.І., асистент каф. БІТ. Відповідальний за випуск: Рецензент Надруковано за рішенням засідання кафедри безпеки інформаційних технологій Національного університету «Львівська політехніка» Протокол № від ______ 2022 р. Мета роботи Опанування технікою роботи з архітектурним симулятором WinMIPS64 машини з 64-розрядною RISC архітектурою MIPS64. Вказівки до роботи Дослідити симулюванням виконання заданих викладачем машинних окремих інструкцій і пар інструкцій. За результатами проведених лабораторних досліджень оформити звіт та захистити його. Симулятор використовує операційну систему Windows. Запуск і конфігурування симулятора WinMIPS64 Симулятор WinMIPS64 стартують за правилами Windows. Основне вікно симулятора містить шість дочірніх вікон і ще статусну лінію під ними. Дочірні вікна отримали назви Pipeline, Code, Data, Registers, Statistics і ще вікно часових діаграм (Clock Cycles Diagram) (Рис. 1).  Рис. 1. Основне і шість дочірніх вікон симулятора WinMIPS64 Далі подано назви та описано призначення дочірніх вікон симулятора WinMIPS64 (Таб. 1). Таблиця 1. Дочірні вікна симулятора WinMIPS64 Pipeline window Вікно конвеєра інструкцій, five pipeline stages : IF – instruction fetch from instruction memory, ID – instruction decoding/operand fetch, EX – execute, MEM – to/from data memory, WB – write back to registers file) Вікно містить “схематичне” подання п’ятисходинкового конвеєра інструкцій 64- розрядного процесора MIPS64 разом з апаратними секціями виконання операцій рухомої коми, а саме, додавання/віднімання (addition/subtraction) множення (multiplication) і ділення (division). Рухоме ділення не конвеєризоване. Це вікно показує, на якій сходинці конвеєра знаходиться та чи інша інструкція. Вікно може збільшуватися.  Code window (вікно коду) Вікно виконує триколонкове подання пам’яті інструкцій, а саме, (зліва направо): адреса байта, 32-бітову машинну інструкцію, асемблерну інструкцію. Подвійний лівий щиголь мишею на певній інструкції встановлює/знімає точку зупинки.  Data window (вікно даних)  Це вікно показує вміст пам’яті даних. Адресування комірок виконується побайтне, проте у вікні вміст поданий 64-бітовими пакетами, тобто так, як цей вміст сприймає 64- розрядний процесор. Аби відредагувати певні дані, треба зробити на них подвійний лівий щиголь мишею (double-left-click).  Register window (регістрове вікно)  Вікно подає вміст регістрів. Коли вміст регістрів подають сірим кольором, тоді воно змінюється під дією програми, що симулюється. Коли вміст регістру подається іншим кольором, тоді цей колір відповідає кольору сходинки конвеєра, де знаходиться відповідна інструкція за умови, що з цієї сходинки є можливим так зване випередження (forwarding). Це вікно дозволяє інтерактивну зміну вмісту будь-якого регістру, тобто, залежно від контексту, зміну коду 64-бітового цілого або рухомого числа, що в поточний момент містить регістр. Останнє можливе лише за умови, що обраний регістр не знаходиться в процесі програмної зміни вмісту і його вміст не використовується для випередження даними. Аби змінити вміст регістра треба двічі натиснути на вікно регістру, з’явиться модальне спливаюче вікно. Треба натиснути 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. Потім, як треба, конфігурують симулятор (тобто віртуальну апаратну частину) через вибір численних опції функціонування цієї апаратури. Можна змінювати структуру і час виконання рухомих операцій на конвеєрі, місткість пам’яті коду/даних. Аби зробити це чи побачити стандартні призначення архітектури викликати наступне вікно (Рис. 2).  Рис. 2. Модальне вікно конфігурування апаратної архітектури Latency – прихована затримка виконання. В останньому вікні зафіксовано розрядності (і відповідно, місткість) пам’яті даних і пам’яті програм. В нас вони дорівнюють 210 = 1024 = 1К 32-х розрядних машинних інструкцій і 210 = 1024 = 1К байтів даних. (Приховані) затримки виконання операцій рухомої коми (FP) складають 4 цикли (тактові інтервали) для рухомого додавання/віднімання (4 сходинки числового конвеєра додавання/віднімання), 7 циклів для рухомого множення (7 сходинок ще одного, паралельного до конвеєра додавання/віднімання, числового конвеєра множення) і 24 цикли для неконвеєрного пристрою ділення даних з рухомою комою. Всі операції для фіксованої коми виконуються за один цикл, тобто, не мають латентних (прихованих) затримок. Будь-які зміни архітектури спричинюють скид симулятора. Дістатися до цього модального вікна можна через меню Configure/Architecture. Ще три опції можна вибрати через пункт меню Configuration, а саме, Multi-Step (декілька кроків одним натиском), Enable Forwarding (дозволити випередження) і Enable Delay Slot (дозволити слот затримки переходу),  Рис.3. Пункт меню головного вікна “Конфігурування” тобто, завжди виконуватиметься інструкція за інструкцією умовного переходу, незалежно від того, зроблено (taken) перехід чи не зроблено (not taken) (Рис. 3). Завантаження програми Користуйтеся стандартним текстовим редактором, наприклад 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   Розберемо коротко інструкції, що використовуються: LD Формат: LD rt, offset(base) Мета: завантажити подвійне слово з пам'яті. Опис: rt ← пам'ять[база+зміщення] Вміст 64-розрядного подвійного слова в місці пам’яті вибирається та розміщується в GPR rt. 16-бітове зміщення зі знаком додається до вмісту бази GPR для формування адреси. Обмеження: Ефективна адреса повинна бути природно вирівняна. Якщо будь-який із трьох найменш значущих бітів адреси відрізняються від нуля, виникає виняток Address Error. MIPS IV: 3 молодших біта поля зміщення мають бути нульовими. Якщо їх немає, то результат інструкції не визначено. Винятки: TLB Refill, TLB Invalid Помилка шини Помилка адреси З арезервована інструкція DADD Формат: DADD rd, rs, rt Мета: додати 64-розрядні цілі числа. Опис: rd ← rs + rt 64-бітове значення подвійного слова в GPR rt додається до 64-бітового значення в GPR rs, щоб отримати 64-розрядний результат. 64-розрядний результат поміщається в GPR rd. Обмеження: Жодного Винятки: Переповнення цілого числа Зарезервована інструкція DSUB Формат: DSUB rd, rs, rt Мета: відняти 64-розрядні цілі числа; пастка при переповненні. Опис: rd ← rs - rt 64-бітове значення подвійного слова в GPR rt віднімається від 64-бітового значення в GPRrs до отримати 64-розрядний результат. 64-розрядний результат поміщається в GPR rd. Обмеження: Жодного Винятки: Переповнення цілого числа Зарезервована інструкція SD Формат: SD rt, зміщення (база) Мета: зберегти подвійне слово в пам'яті. Опис: пам'ять[база+зміщення] ← rt 64-розрядне подвійне слово в GPR rt зберігається в пам'яті в місці, визначеному вирівнянням ефективної адреса. 16-бітове зміщення зі знаком додається до вмісту бази GPR сформувати діючу адресу. Обмеження: Ефективна адреса повинна бути природно вирівняна. Якщо будь-який із трьох найменш значущих бітів ефективної адреси відмінні від нуля, виникає виняток Address Error. MIPS IV: 3 молодших біта поля зміщення мають бути нульовими. Якщо їх немає, то результат інструкції не визначено. Винятки: TLB Refill, TLB Invalid TLB змінений Помилка адреси Зарезервована інструкція HALT Формат: HALT Мета: переводить процесор у стан 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. Тепер програма завантажена до пам’яті і симулятор готовий до функціонування. Коди спостерігають у вікні кодів. Першозначення і зміни вмістимого комірок і регістрів спостерігають через вікна даних і регістрів. Симулювання Покрокове симулювання В будь-якому стані симулятора натисни F10, аби розпочати новий цикл симулювання (Рис. 4). Зауважимо, що на старті перша кольорова лінія в вікні Code з адресою 0х0000 (0000) забарвлена жовтим. Сходинка конвеєра IF у вікні Pipeline також забарвлена жовтим і містить асемблерну мнемоніку першої інструкції програми. Поглянемо до кодового вікна Code та знайдемо там першу інструкцію ld r4, A(r0). У вікні Data можна знайти програмну змінну A. Clock 1 Натиснути Execute/Single Cycle (або натиснути F7). Симулятор виконає перший цикл (тактовий інтервал) програми. Увага! Не першу інструкцію, а лише перший цикл, що для п’ятисходинкового конвеєра відповідає виконанню 1/5 першої інструкції в найкращому випадку, коли нема вимушених затримок конвеєра. Зауважимо, що абревіатура MIPS відповідає в українському перекладі “мікропроцесору, що немає затримок конвеєра”, а не “мільйону операцій на секунду”.  Рис. 4. Головне вікно симулятора з завантаженою програмою sum.s У вікні 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 знову змінює забарвленість вікна Code, уводячи зелену забарвленість для четвертої сходинки MEM конвеєра. До конвеєру входить інструкція sd r3, C(r0). У вікні Cycle бачимо історію виконання кожної інструкції програми, тобто сходинку, на якій знаходиться кожна інструкція перед надсиланням чергового тактового імпульсу. Clock 4 Знову натискаємо F7. Кожна сходинка конвеєра отримує нову інструкцію. Регістр r4 має завантажуватися з комірки пам’яті даних. Проте оновлене вмістиме регістра можна отримати завчасно (кажуть – з випередженням в часі, прямо з виходу пам’яті даних, тобто, з виходу сходинки МЕМ (for forwarding from the MEM stage). Отже, прямо з виходу пам’яті забираємо новий, ще не записаний до регістру призначення операнд (це і є випередження), а далі паралельно виконуємо додавання цього нового операнду і в той самий час пишемо цей операнд до регістру регістрового файлу. Добре, що в конвеєрі водночас знаходиться черга з п’ятьох інструкцій, тобто, всі ці інструкції є «під рукою». Можна бачити, що r4 забарвлюється зеленим (колір сходинки MEM) у вікні Registers. Зауважимо, що остання інструкція програми halt (симулятор не має навіть примітивної програми монітора, що вже казати про операційну систему; отже, програміст мусить вручну гальмувати виконання програми саме такою інструкцією) вже уведена до конвеєра. Clock 5 Натискаємо F7. Тут відбуваються цікаві події. Значення, призначене для r5, стає доступним для пересилання. Однак саме значення для r5 не було доступне вчасно для виконання інструкції dadd r3, r4, r5 у EX. Таким чином воно залишається в EX. У рядку стану написано "RAW зупинка в EX (R5)", вказуючи, де сталася зупинка, і відсутність якого регістру була причиною цього (Рис. 5).  Рис. 5. П’ятий такт виконання програми Фігури в вікнах Clock Cycle Diagram і Pipeline чітко вказують на те, що інструкція dadd “застрягла” в сходинці EX, і що всі інструкції за нею також неспроможні пересуватися конвеєром далі. У вікні Clock Cycle Diagram інструкцію dadd підсвічено блакитним, а інструкції, що розташовані за нею “посіріли”. Clock 6 Натискаємо F7. Інструкція dadd r3,r4,r5 нарешті виконується, а щойно отримана сума, призначена для запису до 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 та Clock 10 Натискаємо F7 двічі. Програма фінішує.  Рис. 6. Дозвіл випередження ще до виконання програми sum.s Зараз проаналізуємо вміст вікна статистики (Statistics) і зауважимо, що зафіксовано 2 loads та 1 store. Це є “тяжкі” інструкції. Ще ми мали 1 пригальмування RAW. Витратили 10 тактових циклів на виконання п’ятьох інструкцій. Значить, отримали середнє число тактових імпульсів CPI = 2 на одну інструкцію. Це в два рази гірше від ідеалу і тут є де вдосконалюватися. Проте, отримане вже є добрим результатом. Вміст вікна статистики негайно відгукується на будь-які зміни в архітектурі (Рис. 6). Дослідимо негативний вплив на продуктивність заборони випередження (що є наслідком спрощення апаратної частини, а дешеве не буває оптимальним). Який час нам знадобиться без використання випередження? Аби дізнатися це активуємо Configure. Для заборони випередження (forwarding) треба клікнути на Enable Forwarding (Рис. 7).  Рис. 7. Заборона випередження По виконанню нашої програми, але вже без випередження, проаналізуємо вміст вікна статистики (Statistics) (Рис. 8). Зауважимо, що маємо 2 loads та 1 store і аж 4 пригальмування класу RAW (додатково втрачено 4 – 1 = 3 такти). Отже програма “з’їла” 10 + 3 = 13 тактових циклів на виконання п’ятьох інструкцій, а середнє число тактів на виконання інструкції погіршилося і становить CPI = 2.600. Отже, продуктивність спрощеної версії процесора є нижчою. Повторимо поетапне виконання програми, переглянемо вікно статистики та порівняємо результати. Зауважимо, що є більше зупинок, оскільки інструкції затримуються в ID, очікуючи на реєстр, а отже, очікуючи більш ранньої інструкції для завершення WB. Переваги пересилання мають бути очевидними.  Рис. 8. Головне вікно симулятора по завершенню виконання програми sum.s без використання випередження Інші режими симулювання Активуємо 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 позначеної інструкції подвійного додавання. Завдання Виконати пункти 2 та 3 згідно варіантів поданих нижче (Таб. 2). Для операції віднімання використати інструкцію dsub. Таблиця 2. Варіанти для виконання завдання Варіант Число А Число В Арифметична операція  1 30 2 +  2 10 9 -  3 25 7 +  4 17 6 -  5 69 15 -  6 30 3 +  7 56 6 -  8 81 14 +  9 96 6 -  10 75 5 +  11 10 8 +  12 15 17 +  13 36 8 -  14 45 6 +  15 31 9 -  16 79 10 -  17 26 1 +  18 50 23 -  19 28 45 +  20 58 9 +  21 44 7 -  22 22 8 +  23 12 26 -  24 31 2 -  25 14 36 +  26 19 15 +  27 27 19 -  28 15 20 +  29 33 7 -  30 19 22 -  31 40 1 +   Контрольні питання Поясніть за що відповідають наступні апаратні інструкції: ld dadd dsub sd halt Як перевірити синтаксис коду для MIPS64 Опишіть що відбувається в Clock 5. Що таке RAW? Що таке регістри? Де вони використовуються в коді програми? Які системи числення існують? Перевести з 10-ої в 16-ову систему наступні числа: 10 18 5 14 Перевести з 16-ої в 10-ову систему наступні числа: 12 8 А Поясніть отримані після виконання програми результати.
Антиботан аватар за замовчуванням

08.04.2025 11:04-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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