Міністерство освіти і науки України
НУ "Львівська політехніка"
кафедра ЕОМ
Курсова робота
з курсу
“Архітектура комп’ютерів”
На тему:
«ДОСЛІДЖЕННЯ RISC АРХІТЕКТУРИ»
Виконав:
ст. гр. КІ-34
Перевірила:
ЛЬВІВ-2008
ВСТУП
Мета курсового проектування полягає в опануванні студентом знань про принципи дії та архітектуру прототипних варіантів сучасних RISC-комп'ютерів (Reduced Instruction Set Computing), систем, розташованих на межі старих CISC (Complex Instruction Set Computing) та нових архітектур.
Сутність RISC підходу полягає у перерозподілі складності в парі апаратура – системні програми в спосіб спрощення системи інструкцій процесора, збільшення тактової частоти, уведення конвейєрного принципу виконання інструкцій послідовного програмного потоку з одночасним підвищення складності компілятора,. За рахунок перерозподілу та перекладання додаткової частки часових витрат на етап підготування програми (compile time) скорочують часові витрати на виконання машинного коду (run-time). Цього досягають навіть за умови збільшення кількості спрощених машинних інструкцій в програмі. Проте RISC напрямок вдосконалення комп’ютерних засобів не є безперечним. Зараз він спровокував досить суперечливий напрямок безмежного нарощування складності і апаратури, і системних програм новітніх конвейєрних суперскалярних RISC машин.
Наприклад, остання розробка процесора Merced фірми INTEL (ІНТтегрована ЕЛектроніка) свідчить про відмову цієї фірми та її компаньона фірми Hewlett-Packard (промовляти як Х'юлетт-Паккард) від RISC-підходу на користь "не-ріскової" тригер-транспортної архітектури з прямим паралельним, а не лише конвейєрним опрацюванням інструкцій. Але тригер-транспортна архітектура поки що лишається поза межами курсового проектування.
Розглянемо ілюстративний приклад програмування RISC машини, а саме, запрограмуємо С-оператор А = B + С. Фрагмент асемблерної програми має вид:
LW R1, B
LW R2, C
ADD R3, R1, R2
SW A, R3
У фрагменті через A, B, C позначено адреси комірок пам/яті даних, де зберігають відповідно збіжні за назвою операнди і результат. LW є інструкцією завантаження операнду з комірки пам’яті до регістра, інструкція SW виконує зворотню дію, ADD є інструкцією додавання. Бачимо, що дії з завантаження операндів до регістрів з комірок пам’яті та збереження результату у комірці пам’яті відокремлено від виконання власне операції додавання. Функції інструкцій різних типів зараз мають наближено однакову складність, що є необхідною передумовою виконання послідовного потоку таких інструкцій на конвеєрі з метою суттєвого прискорення опрацювання програмного коду. Як правило, у RISC-машинах довжини форматів усіх інструкцій є сталими, а кількість адресувальних режимів – мінімальна. Інтуітивно зрозуміло, що обмеження складності є запорукою прискореного опрацювання спрощених інструкцій в процесорі.
Зміст
1. Синтез структури RISC машини 5
2.Розробка тестової програми 16
2.1 Розробка базового варіанту тестової програми 16
2.2 Модифікація базового варіанту тестової програми 18
3. Результат роботи 20
Висновок 21
4. Література 22
1. Синтез структури RISC машини
Перший крок розробки прототипного (неконвейєрного) варіанту скалярного RISC-комп'ютера - це синтез структурної схеми машини.Синтез грунтується на часовій діаграмі виконання репрезентативної інструкції процесора, тобто такої інструкції, що має найбільшу часову складність виконання. В нашому випадку такою інструкцією є інструкція завантаження словного операнду з пам'яті даних до будь-якого регістру з регістрового файла чи різновид цієї інструкції, наприклад,
LW R7, 14(R5).
Часовий опис виконання відповідних зазначеній інструкції завантаження 32-х бітового слова з комірки пам'яті за адресою
ADDRESS=(R5)+14
до регістру R7 надають наступною впорядкованою послідовністю виконання мікродій (тобто, мікропрограмою):
вибирання інструкції з пам'яті інструкцій за адресою, яку містить лічильник команд PC Program Counter);
вибирання вмістимого комірки R5 з регістрового файла;
обрахування значення ефективної адреси (значення змінної ADDRESS);
вибирання з пам'яті даних за визначеною ефективною адресою операнда та тимчасовий запис його до програмно недосяжного регістру даних пам'яті LMD Load Memory Data);
наступне пересилання вмістимого регістру даних пам'яті LMD до комірки R7 регістрового файла.
Якщо кожний окремий мікрокрок у щойно наведеній мікропрограмі назвати циклом мікропрограми, тоді часова діаграма виконання інструкції завантаження операнда складатиметься з припасованої у часі послідовності п'яти циклів (часова складність є п'ять). З аналізу наведеної у таблиці 2 системи інструкцій комп'ютера можна дійти висновку, що теза про найбільшу складність інструкції типу LW є коректною. Зауважимо наступне.
По-перше, проектування машини сучасної архітектури щільно пов'язано з її часовою поведінкої.
По-друге, з точки зору програміста чи інтелектуального транслятора з мови високого рівня, існує множина регістрів. В нас це програмно досяжні регістри R0,...,R31. Проте комп'ютерний інженер ці регістри не проектує через те, що реально застосовує множину комірок із збіжними до назв регістрів адресами {R0,...,R31} внутрішньої пам'яті. Ця пам’ять має назву регістровий файл. Концепція регістрового файла (з нашої, не програмістської точки зору) є технологічною. Вона дозволяє збільшити кількість логічних регістрів загального призначення Rх (до 256 у процесорах фірми SUN). Водночас, комірки регістрового файла не поступаються у швидкодії "справжнім" регістрам, адже такий файл розташовано на кристалі процесора. Графічне уявлення часових витрат та їхнє впорядкування при виконанні інструкції LW містить рис.1.
Рис.1. Часова діаграма виконання п’ятициклової інструкції “завантаження” LW
На рис. 1 застосовано наступні скорочені назви циклів:
- IF : вибирання поточної інструкції з пам'яті інструкцій (instruction memory чи IM); назва циклу - Instruction Fetch;
- ID : декодування інструкції (Instruction Decoding) та вибірання операндів;
- EX : виконання дій, притаманих інструкції, що виконується (EXecution);
- MEM: читання або запис операндів/результатів (access) з/до пам'яті даних (data memory); наявність відокремлених пристроїв instruction memory та data memory притамане гарвардській архітектурі Harvard Architecture;
- WB: зворотній запис (Write Back) результатів АЛП-операцій або отриманих з пам'яті кодів операндів до комірок регістрового файла. АЛП - це скорочення назви "арифметичний і логічний пристрій".
Застосовані назви циклів (інколи кажуть - фаз) дещо узагальнюють притаману лише інструкції LW семантику кожної окремої фази. Це коректно, бо нашою метою є наближення до такої циклової послідовності, яка задовільняє вимогам будь-якої інструкції з заданої до реалізації множини з метою досягнення найбільшої швидкодії. Водночас, ми орієнтуємося на найскладнішу інструкцію.
Зауважимо також, що в нашому випадку фізично кожний цикл у часі відповідає одному тактовому інтервалу, а кількість тактових інтервалів, що має витрачатися на виконання будь-якої інструкції процесора, передбачають сталою (класично – це п'ять інтервалів). Можливо, що при зазначеному підході деякі інструкції матимуть порожні (не потрібні ним, зайві) цикли. Якщо внутрішня тактова частота процесора дорівнюватиме 500 МГц, тоді на кожний такт чи однотактовий цикл припаде 2 нс, а час виконання кожної інструкції складатиме 2*5=10 нс. За цієї умови у прототипному варіанті досягають швидкодії 100 мільйонів інструкцій на секунду (100 MIPS)
На рис. 2 наведено варіант (by J. Hennessy and D. Patterson, Stanford University та Berkeley University, USA) побудови інформаційного тракту прототипу скалярного RISC комп'ютера. Останній відомий у світі під назвою DLX (DeLuXe) процесор (машина). Назва інформаційний тракт (Datapath) виникла через інтегральне подання та розгляд регістрової структури процесора разом із пристроями пам'яті даних DM і пам'яті інструкцій (команд) IM. Зрозуміло, що тут реалізовано Гарвардську (Harvard University in the USA) архітектуру.
Рис. 2. Структура інформаційного тракту прототипу скалярного RISC комп'ютера
Скороченням PC позначено лічильник інструкцій (Program Counter). Вмістиме РС визначає адресу інструкції в пам'яті інструкцій ІМ. Комбінаційний додавач Adder обраховує адресу (наступної за чергою виконання) інструкції. При цьому враховано, що впорядкована послідовність інструкцій, або програма, складається з чотирьохбайтових і тільки чотирьохбайтових інструкцій (усі інструкції мають формати з довжиною 32 біти), які розміщено в IM за послідовними адресами 0, 4, 8, C і т.д. Через це константа зсуву адреси (пересування покажчика на наступну за чергою інструкцію) дорівнює +4. Визначене за допомогою додавача значення адреси вибирання наступної інструкції зберігають у регістрі NPC (next PC). Зчитаний з ІМ бінарний код поточної інструкції записують до регістру інструкції IR. Поля щойно вибраної інструкції (рис. 6), що містять бінарні коди-ідентифікатори регістрів-операндів, є фактично адресами комірок внутрішньо процесорної пам'яті, яка емулює пул (множину) програмно досяжних (видимих програмісту) регістрів. Вмістиме зазначених полів формату інструкції надсилають на адресні входи регістрового файлу Registers чи Regs, а відповідні надісланим адресам бінарні коди регістрових операндів завантажуються до внутрішних, програмно недосяжних, тобто службових регістрів А і В.
Існує ще один тип операнда з назвою “безпосередній” (Immediate чи Imm). Його задають прямо у форматі інструкції. Як правило, довжина безпосереднього операнда не перевищує половини довжини формату інструкції. В нас безпосередній операнд матимеме довжину 32/2 = 16 бітів. В той самий час бажано зафіксувати таку довжину формату даних такою, що дорівнює довжині формату інструкції ( зауважимо без пояснень, що різноманіть довжин форматів суттєво пригальмовує машину). Якщо усі формати даних, як і формати інструкцій, матимуть довжину 32 біти, тоді безпосередньому операнду невистачатиме ще 16 бітів аби бути стандартним за довжиною. Тому знакове розширення 16 бітового безпоседнього операнда до 32-х бітів виконує комбінаційний вузол Sign Extend. Результат знакового розширення тимчасово зберігають у службовому регістрі Immediate (Imm). В цілому можна нарахувати чотири можливі операнди на вході АЛП:
- з регістрів А, В, Imm;
- вмістиме регістру адреси наступної для виконання інструкції NPC.
Наперед зазначимо, що останній операнд-адресу опрацьовують в АЛП при виконанні інструкцій умовного та безумовного переходів, коли на додаток до натуральної потрібна ще одна адреса, що утворена додаванням до вмістимого NPC деякої константи переходу.
Вибирання двох операндів АЛП з чотирьох можливих виконують за допомогою мультиплексорів операндів MUX, розташованих на його входах. Результат операції АЛП тимчасово запам'ятовують у проміжному службовому регістрі ALUoutput (ALUout). Якщо результатом операції є число, тоді його заносять до комірки регістрового файла. Якщо результатом операції є адреса, тоді цю адресу надсилають до (верхнього на рисунку) мультиплексора вибору адреси MUX. За допомогою зазначеного мультиплексора вибирають адресу переходу (чергова чи перехід), яку і надсилають до лічильника інструкцій PC аби коректно продовжити виконання програми.
Керування мультиплексором вибору адреси наступної інструкції покладено на вузол Zero?, де вмістиме службового регістра А порівнюють із нулем (дорівнює нулю, більше нуля, менше нуля і т.д., в залежності від виду виконуваної в поточний час операції умовного переходу). Результат порівняння є бінарним логічним значенням (так або ні). Саме цей бінарний результат керує роботою мультиплексора вибирання адреси.
Результат-адресу з виходу АЛП можуть надсилати до пам’яті даних як адресу комірки цієї пам’яті в інструкціях збереження/завантаження.
Результатом на виході правого на рисунку 2 мультиплексора може бути або вмістиме пам’яті даних (при виконанні інструкції завантаження LW слова з пам’яті даних до регістру регістрового файла), або результат виконання арифметичної, зсувної, логічної чи іншої операції в АЛП (наприклад, при виконанні інструкцій ADD, SUB і т.д.). Такий результат засобами мікропрогрування зберігають в регістрі регістрового файла. Отже, зазначений мультиплексор, керований від регістру поточної інструкції, комутує на вхід регістрового файла потрібну інформацію.
При конвейєрному опрацюванні послідовного потоку інструкцій виконуваної програми не враховують 5-ти циклову затримку виконання першої інструкції та вважатють потік інструкцій достатньо довгим. В цьому випадку (див. рис. 3) еквівалентні часові витрати на виконання однієї інструкції складатимуть лише один цикл чи тактовий інтервал, а пікова (гранична зверху) швидкодія, яку забезпечує ідеалізований варіант конвейера, зросте в порівнянні з скалярнім неконвейєрним прототипом до 500 млн. інструкцій за секунду при тактовій частоті 500 МГц
Зауважимо, що теоретично обгрунтоване прискорення конвейєра (до значення 5:1 в нашому випадку) є найвищим, тобто піковим. Його досягають лише за ідеальної умови, коли нема жодних залежностей (зв’язків) поміж сусідніми інструкціями послідовного потоку, що вже завантажені на виконання до конвейєра, та коли в цьому потоці відсутні інструкції переходів. Реально до часової діаграми роботи конвейєра мусять уводять затримки (порожні фази), аби результати неконвейєрного і конвейєрного опрацювання потоку інструкцій збігалися. В наслідок цього реальна продуктивність конвейєра зменшена в порівнянні з піковою, а його апаратна реалізація ускладнена.
Рис. 3. Принцип конвейєрного опрацювання послідовного потоку інструкцій
На рис. 3 зазначено порядок опрацювання трьох сусідніх інструкцій з послідовного програмного потоку. Часові витрати на кожну інструкцію висвітлено окремими горизонтальними смугами, які, у свою чергу, явно поділено на п’ять фаз чи циклів.
Рис. 3а. Ілюстрація переходу від неконвейєрного до конвейєрного опрацювання послідовного потоку інструкцій (ідеальний погляд на конвейєр)
Припустимо, що часові витрати при опрацюванні окремих етапів (циклів) виконання інструкції знаходяться в межах 50-60 нс. Тоді часові витрати на реалізацію конвейєрного способу опрацювання визначаються так, як це зазначено на рис. 3а. Надлишок в 5 нс (наближено 10 %) у кожному циклі конвейєра в порівнянні з неконвейєрною реалізацією додано через дещо сповільнену роботу ускладненої конвейєрним принципом апаратури. Це накладна платня за прискорення. Зрозуміло, що від планованого 100 відсоткового результату лишається лише100 – 10 = 90 відсотків.
Конвейєрне використання (завантаження в часі) апаратних засобів ілюструє рис. 4.
Рис. 4. Використання апаратури при конвейєрному опрацюванні (ідеальний пипадок)
Конвейєрний варіант побудови інформаційного тракту наведено на рис. 5. Конвейєрні регістри – це звичайні, але програмно “прозорі”, тобто невидимі регістри. Вони містять повне інформаційне “оточення“ інструкції, що вже є на конвейєрі, аби створити їй віртуальне враження про класично-ізольоване від інших сусідніх інструкцій опрацювання.
Рис. 5. Конвейєрний (основний) варіант побудови інформаційного тракту DLX машини.
На рис. 5 затемнено так звані “конвейєрні” регістри, які розташовано “на межі циклів”. Вони мають назви, відповідні сусіднім межам, наприклад, IF/ID, ID/EX, EX/MEM, MEM/WB. Кожну поточну інструкцію, що опрацьовують, ніби пересувють сходинками IF, ID, EX, MEM, WB конвейєра. В ідеалі кожна з інструкцій не “відчуває” присутності на інших сходинках конвейєра “сусідів-конкурентів” на використання апаратури інформаційного тракту.
Алгоритми виконання інструкцій, що містить тестова програма, подані таблицею 1.
Таблиця 1 - Алгоритми виконання інструкцій
Інструкція
Алгоритм виконання інструкції
Арифметичні та логічні інструкції
ADD R1, R2, R3
Regs[R1] = Regs[R2} + Regs[R3]
ADDI R1, R2, #3
Regs[R1] = Regs[R2] + 3
SLT R1, R2, R3
if (Regs[R2] < Regs[R3]) Regs [R1] = 1 else Regs[R1] = 0
Інструкції збереження й завантаження
LW R1, 30(R2)
Regs [R1] = 32 DM [30 + Regs[R2]]
SW 500(R4), R3
DM[500 + Regs[R4]] = 32 Regs[R3]
Інструкції керування програмою
BEQZ R4, name
if (Regs[R4] == 0) PC = name;
((PC + 4) – 2 15) =< name =< ((PC + 4) + 2 15);
BNEZ R4, name
if (Regs[R4] != 0) PC = name;
((PC + 4) – 2 15) =< name =< ((PC + 4) + 2 15);
До інструкцій керування виконанням програми належать умовні й безумовні переходи, і деякі інші інструкції, наприклад, TRAP (остання тимчасово, на короткий термін ніби "передовіряє" керування апаратурою деякому модулю операційної системи), а також інструкція повернення з виключення (обробка особливої ситуації, що може виникнути при виконанні операції) RFE (Return From Exception).
До інструкцій обробки чисел з рухомою комою належать додавання, віднімання, множення, ділення і низка інших операцій над рухомими кодами; інструкції існують у двох варіантах: з одинарною і з подвоєною точністю.
Пересилання даних поміж регістрами та пам'яттю даних, або поміж регістрами цілих операндів і регістрів операндів із рухомою комою та спеціальними регістрами; адресування пам'яті виконують за допомогою лише однієї адресувальної моди (mode), де 16-бітовий зсув, що міститься у форматі інструкції, додають до вмістимого одного з регістрів загального призначення (тобто регістра, що містить базову адресу).
Ще раз пригорнемо увагу до того, що саме інструкції завантаження (load) чи збереження (store), які належать до цього типу, вивільнено від додаткової функції арифметичного, логічного чи будь-якого іншого опрацювання операндів. Це, по-перше, задовольняє необхідній умові створення множини інструкцій (машинних команд) RISC-архітектури, а, по-друге, дозволяє визнати архітектуру, що зараз розглядається як load/store, або ж RISC-ковою.
Пояснимо на ілюстративному прикладі синтаксис запису алгоритмів виконання окремих машинних інструкцій DLX (див. таблицю 1). Розглянемо запис:
Regs[R19]16..31=16(DM[Regs[R8]]0 )8 ## DM [ Regs[R8]].
Запис фіксує наступне. Оновлюють лише 16 молодших (правих) бітів регістру R19. До них пересилають двобайтовий бінарний код, в якому молодший правий байт береться з пам’яті даних DM за адресою, що є збіжною з вмістимим регістру R8. Старший лівий байт утворюють вісім разовим повторюванням нульового (старшого) розряду щойно згаданого правого байта. Парою символів ## позначено операцію конкатенації (зчеплення) двох байтів до двохбайтового напівслова.
2.Розробка тестової програми
2.1 Розробка базового варіанту тестової програми
Завдання на курсову роботу полягало у створенні тестової програми, яка б в повній мірі відображала всі особливості RISC – архітектури. Було запропоновано розробити програму, яка б рахувала факторіал числа, яке повинно вводитись з клавіатури.
Текст програми:
.data
Prompt: .asciiz "An integer value >1 : "
PrintfFormat: .asciiz "Factorial = %g\n\n"
.align 2
PrintfPar: .word PrintfFormat
PrintfValue: .space 8
.text
.global main
main:
addi r1,r0,Prompt
jal InputUnsigned
;*** init values
movi2fp f10,r1 ;R1 -> D0 D0..Count register
cvti2d f0,f10
addi r2,r0,1 ;1 -> D2 D2..result
movi2fp f11,r2
cvti2d f2,f11
movd f4,f2 ;1-> D4 D4..Constant 1
;*** Break loop if D0 = 1
Loop: led f0,f4 ;D0<=1 ?
bfpt Finish
;*** Multiplication and next loop
multd f2,f2,f0
subd f0,f0,f4
j Loop
Finish: ;*** write result to stdout
sd PrintfValue,f2
addi r14,r0,PrintfPar
trap 5
trap 0
Результат симулювання базової версії програми зображено на рис. 6
Рис. 6 Результат симуляції виконання базової версії програми
Як видно з рис. 6, на виконання програми затрачено 100 циклів, виникло 10 RAW затримок.
2.2 Модифікація базового варіанту тестової програми
Проаналізувавши роботу конвеєра я модифікував базову версію програми, отримавши в результаті наступний код програми:
.data
Prompt: .asciiz "An integer value >1:"
PrintfFormat: .asciiz "Factorial = %g\n\n"
.align 2
PrintfPar: .word PrintfFormat
PrintfValue: .space 8
.text
.global main
main: addi r1,r0,Prompt
jal InputUnsigned
movi2fp f10,r1
cvti2d f0,f10
addi r2,r0,1
movi2fp f11,r2
cvti2d f2,f11
movd f4,f2
Loop: multd f2,f2,f0
subd f0,f0,f4
eqd f0,f4
bfpf Loop
Finish: sd PrintfValue,f2
addi r14,r0,PrintfPar
trap 5
trap 0
Результат симуляції модифікованої версії програми зображено на рис. 7.
Рис. 7 Результат тестування модифікованої версії програми
Як видно із статистики тестування, для опрацювання тієї ж задачі було витрачено 95 циклів, при цьому виникло 10 RAW затримок, які виникають в модулі вводу. Приріст ефективності невеликий, проте це обрахунок факторіалу 5, при більших числах приріст буде більш помітний.
3. Результат роботи
Ідеальний конвеєр, де відсутні будь-які залежності витрачає на виконання програми N тактових інтервалів, проте спроможний виконувати лише той програмний код, який складено виключно з незалежних поміж собою інструкцій. Проте з незалежних інструкцій скласти сенсовну програму неможливо. Неконвеєрний варіант машини з тою самою архітектурою рівня машинних інструкцій вимагав би Nх5 апаратних циклів на виконання. Отже, через використання конвеєрного способу опрацювання машинних інструкцій нами досягнуто п’ятикратне прискорення.
Висновок
Таким чином в даному проекті розглянуто основні принципи проектування RISC-комп’ютерів. Приведено генеральну структуру конвеєрної та неконвеєрної RISC-системи.
RISC інструкції призначені для опрацювання конвеєром інструкцій.
Ідеально на n сходинковому конвеєрі опрацьовують n циклові RISC інструкції, при цьому на виконання кожної такої інструкції витрачають лише один апаратний цикл. Отже, прискорення опрацювання інструкцій на ідеальному конвеєрі дорівнює числу його сходинок (в нас – в п’ять разів).
Конвеєр прискорив виконання нашої тестової програми майже в чотири рази. Ідеальне прискорення майже дорівнює чотирьом, яке було досягнуте. Водночас, тестова програма виявилася закороткою, аби претендувати на ідеальному конвеєрі на прискорення в п’ять разів.
4. Література
Методичні вказівки щодо виконання курсової роботи:»Дослідження RISC-архітектури». Троценко В.В., Березко Л.О., Львів-2007
Лабораторний практикум з предмету ”Архітектура комп’ютерів ” Укладач доц. к.т.н. В. В. Троценко, Львів-2007.
Числа Фибоначчи. Воробєв Н.Н. МОСКВА-1978р.
http://yaroshevich.belhost.by/FLP/index.html алгоритми рекурсивних функцій.