Архітектура комп’ютера (ч. 2 )
1 рівень
1
Процесор має клас: (А) master, (Б) arbiter, (В) slave.
АБВ
2
Прямим доступом до пам’яті керує: (А) програма, (Б) спеціалізований процесор, (В) порт вводу-виводу.
АБВ
3
RISC програми в середньому коротші від CISC програм: (А) так; (Б) ні, (В) програми приблизно рівні.
АБВ
4
Ввід-вивід з перериванням має: (А) високу, (Б) середню, (В) порівняльну низьку швидкодію.
АБВ
5,12
Паралельна обробка машинних інструкцій є несумісною з конвеєрною обробкою даних : (А) так; (Б) ні, (В) частково сумісна.
АБВ
6,13
Північний і південний мости ПК з’єднані шиною: (А) USB, (Б) PCI, (В) спеціалізованою шиною.
АБВ
7,20
Техніка спекулятивного виконання машинних інструкцій застосовується в: (А) EPIC процесорах, (Б) RISC процесорах, (В) VLIW процесорах.
АБВ
8,21
Механізм передбачення виконання умовного переходу мають : (А) VLIW процесори, (Б) машини потоку даних; (В) RISC машини.
АБВ
9,22
Невпорядковане виконання машинних інструкцій притамане: (А) VLIW машинам; (Б) RISC машинам; (В) EPIC машинам.
АБВ
10,30
Зарахування результату спекулятивно виконаних машинних інструкцій виконується : (А) негайно; (Б) відкладається, (В) результати не зараховуються.
АБВ
2 рівень
11,15. Визначити середнє значення прискорення, що забезпечує конвеєрний варіант інформаційного тракту у порівнянні з неконвеєрним за умови, коли в неконвеєрній реалізації довжина одного циклу складає 10 нс, а питома вага чотирициклових АЛП-інструкцій та умовних переходів і п'ятициклових операцій load/store дорівнює, відповідно, 40, 20 і 40 відсотків. Припустити, що складна конвеєрна реалізація примушує збільшити тривалість циклу на 10 відсотків.
Відповідь
Середній час виконання фрагменту програми складає:
10 нс * (( 40% + 20% ) * 4 + 40% * 5) = 44 нс.
Довжина циклу у конвеєрному варіанті:
10 нс + 1нс =11 нс.
Прискорення:
44 нс : 11нс = 4.
12. Проектувальник компілятора має вибрати один з двох варіантів компіляції певного оператора мови програмування високого рівня. В варіантах компіляції застосовують машинні інструкції класів А, В, С з різним числом тактових інтервалів (циклів) на виконання. Варіанти компіляції подано наступною таблицею. Тут ЧТІ є числом тактових інтервалів на виконання однієї інструкції.
Варіант
компіляції
Число інструкцій відповідного класу
А (ЧТІ=1)
В (ЧТІ=2)
С (ЧТІ=3)
1
2
1
2
2
4
1
1
Скільки тактових інтервалів вимагає для виконання кожний варіант компіляції?
Відповідь
Варіант 1 виконує 2 + 1 + 2 = 5 інструкцій. Варіант 2 виконує 4 + 1 + 1 = 6 інструкцій. На перший погляд, варіант 1 є швидшим.
Розглянемо питання ретельніше. Визначимо кількість тактових інтервалів, витрачених обробкою кожного варіанту. Маємо
CPU clock cycles = .
Відповідно у першому та другому варіантах отримаємо, що
CPU clock cycles 1 = (2х1) + (1х2) + (2х3) = 10 cycles;
CPU clock cycles 2 = (4х1) + (1х2) + (1х3) = 09 cycles.
Виходить, що варіант 2 є скорішим. Тобто варіант 2 без втрати продуктивності можна виконувати на повільнішому CPU, хоча він і містить більше інструкцій.
Визначимо ще середнє значення кількості тактових інтервалів на виконання однієї інструкції в кожному варіанті коду.
CPI = CPU clock cycles / Instruction count
CPI 1= CPU clock cycles 1 / Instruction count 1 = 10 / 5 = 2;
CPI 2 = CPU clock cycles 2 / Instruction count 2 = 9 / 6 = 1,5.
Тобто, перевага виникає тоді, коли забезпечено менше середнє значення СРІ.
13. Розглянемо машину з трьома класами інструкцій, кожна з яких має відповідне число тактових інтервалів (ЧТІ) на виконання, як то подано таблицею. Ця ж таблиця подає результати компіляції певної програми. Нехай машина має тактову частоту 500 МГц.
Джерело коду
Число інструкцій ( в мільярдах) відповідного класу в складі програми
А (ЧТІ=1)
В (ЧТІ=2)
С (ЧТІ=3)
Компілятор 1
5
1
1
Компілятор 2
10
1
1
Якою є швидкодія коду другого компілятора в одиницях MIPS (Million Instruction Per Second)?
Відповідь
Перед усім визначимо час виконання кожного з двох прокомпільованих варіантів програм за допомогою наступних рівнянь:
Execution time = CPU clock cycles / Clock rate.
СPU clock cycles = .
Далі отримуємо, що
CPU clock cycles 1 = (05 * 1 + 1 * 2 + 1 * 3) * 10 9 = 10 * 10 9
CPU clock cycles 2 = (10 * 1 + 1 * 2 + 1 * 3) * 10 9 = 15 * 10 9
Тоді
Execution time 1 = 10 * 10 9 / 500 * 10 6 = 20 sec
Execution time 1 = 15 * 10 9 / 500 * 10 6 = 30 sec
Тобто, компілятор 1 генерує більш швидкий програмний код.
Зараз прорахуємо MIPS рейтинг.
MIPS = Instruction count / Execution time * 10 6
MIPS 1 = (05 + 1 + 1) * 10 9 / 20 * 10 6 = 350,
MIPS 2 = (10 + 1 + 1) * 10 9 / 30 * 10 6 = 400.
Виходить, що компілятор 2 має вищий MIPS рейтинг, проте генерує повільніший код!
14. Визначити середнє прискорення, що забезпечує конвеєрний (багатоцикловий) варіант інформаційного тракту в порівнянні з прототипним неконвеєрним одноцикловим варіантом, за умови, коли тракт утворено низкою послідовно з’єднаних вузлів із відповідною швидкодією 10 нс, 8 нс, 10 нс, 10 нс, 7 нс. При цьому складна конвеєрна реалізація вимагає збільшення тривалості опрацювання у кожному вузлі на 1 нс.
Відповідь
Середній час на виконання однієї інструкції в неконвеєрному варіанті дорівнює:
10+8+10+10+7=45нс.
У конвеєрному варіанті довжина циклу становить:
10+1=11нс.
Інструкція в конвеєрі виконується за один цикл (без врахування початкової затримки), тому конвеєр забезпечує прискорення в
45:11=4.1 рази.
16. Порахувати в скільки разів впала швидкодія в порівнянні з ідеальним випадком за рахунок наявності структурної залежності типу load для конвеєрного варіанту скалярного процесора. Припустити, що машина має нойманівську архітектуру. Питома вага посилань на дані складає 40 відсотків у суміші інструкцій. Число тактових інтервалів (ЧТІ) на виконання однієї інструкції в ідеальній машині дорівнює 1, а реальна машина зі структурною залежністю має прискорений в 1,05 рази цикл.
Відповідь
Середній час виконання інструкції:
Ідеальна машина не має пригальмувань конвеєра, тому для неї СРІ=1,
А середній час виконання інструкції становить
AverageInstructionTime=CPI*ClockCycleTimeIdeal.
Середній час виконання інструкції у машині із структурними залежностями є:
AverageInstructionTime=CPI*ClockCycleTime=
[(1+0.4*1)*СlockCycleTimeIdeal] : 1.05 = 1.3 * ClockCycleTimeIdeal.
Зрозуміло, що досягається (в ідеалі) прискорення в 1.3 рази.
17. Визначити джерела, що спричинюють переривання на сходинці EX конвеєра інструкцій RISC машини.
Відповідь
Арифметичне виключення
18. Визначити джерела, що спричинюють переривання на сходинці MEM (звернення до пам’яті на читання операнда або на запис результату) конвеєра інструкцій RISC машини.
Відповідь
Промах сторінки пам'яті даних при читанні або запису; невыровненное звернення до пам'яті; порушення захисту пам'яті
19. Роз’яснити термін «організація прецизійного переривання в конвеєрі RISC машинних інструкцій».
Відповідь
Коли конвеєр можна призупинити так, що інструкції, які безпосередньо передують інструкції, яка викликала переривання, завершуються нормально (адже ці інструкції аж ніяк не залежать від переривання, що розглядається), а інструкції, що були в черзі після інструкції - автора переривання, можна заново перезапустити на виконання (знов таки так, ніби переривання і не виникало), тоді кажуть, що конвеєр забезпечує точне (прецизійне) переривання.
20. Яке мультипереривання може відбутися під час виконання циклу 4 наступного фрагменту інструкцій.
Цикл
1
2
3
4
5
6
7
LW
IF
ID
EX
MEM
WB
ADD
IF
ID
EX
MEM
WB
Відповідь
Оскільки існує парадокс пам'яті, то у випадку "невлучення до кешу" потрібне ''покарання" певною кількістю додаткових тактових інтервалів, наприклад 40, щоб погодити швидкодію процесора і пам'яті даних за рахунок пригальмування операцій на процесорі.
3 рівень
23. Знайти і порівняти часові витрати (в тактових інтервалах на пересилання одиного байта від пам’яті до процесора) для наступних варіантів мікроархітектури головної (оперативної) пам'яті: вузька (завширшки одне слово), широка (два слова), з розшаруванням (чотири банки, кожний банк має ширину в одне слово). Нехай модулі, з яких складено пам'ять, та шина процесор-пам'ять характеризуються так:
пересилання адреси від процесора до пам'яті дорівнює 1 тактовому інтервалу шини;
вибирання даних при читанні з будь-якого модуля дорівнює 15 тактовим інтервалам шини;
пересилання одного зчитаного слова від пам'яті до процесора дорівнює 1 тактовому інтервалу шини.
Обрахувати випадок стандартного зчитування процесором пакету з 4-х слів (4*4 = 16 байтів) пам'яті (для кожного з трьох варіантів).
Відповідь
- (варіант а) 1 + 15*4 + 4*1 = 65 такт. інтервалів або ж 16/65 = 0.25 байти на один такт, інтервал. Або 65/16 = 4,06 такт. інтервалів на байт.
ширина пам'яті - одне слово (типово - 32 біти);
- (варіант Ь) 1 + 15*2 + 2*1 = 33 такт. інтервалів або ж 16/33 = 0.5 байти на один такт. інтервал для пам'яті шириною у два слова (типово - 64 біти); Або 33/16 = 2,06 такт. інтервалів на байт.
- (варіант с) 1 + 15*1 + 4*1 = 20 такт, інтервалів або ж 16/20 = 0.8 байти на один такт, інтервал, ширина одного банку - 1 слово, тобто. 32 розряди. Або 20/16 = 1,25 такт. інтервалів на байт.
24. Реальний кеш інструкцій на програмі gcc (компілятор Сі для Лінакс) забезпечує 2% промахів, а реальний кеш даних - 4% (отримано моделюванням). Хай комп’ютер витрачає 2 цикли (цикл = тактовому інтервалу) на виконання одної машинної інструкції (СРІ=2), коли всі звернення до пам'яті задовільняє кеш, а покарання за невлучення до кеша даних або кеша інструкцій дорівнює 40 циклам. Знайти, в скільки разів скоршою є машина з ідеальним кешем, який задовільняє усі звернення до пам'яті, в порівнянні з машиною з реальним кешем? Питома вага інструкцій load/store для програми gcc складає 36%.
Відповідь
Якщо програма компілятора містить І інструкцій, тоді ми маємо втратити при вибиранні інструкцій, що дорівнюють
І*2°/о*40= 0.8*І
циклів на очікування готовності пам'яті інструкцій. При обміні даними ми втратимо ще
І*4%*36%*40=0.53*I
циклів. Отже, відношення витрачених на виконання програми циклів для реального кеша до того самого при ідеальному кеші становить
І*(2 + 0.3 + 0.58)/(І*2) = 3.38/2 = 1.69 разів.
Тобто, реальний (і цілком непоганий) кеш першого рівня майже вдвічі пригальмував машину. Зауважимо, що статистичні 36% з розподілу інструкцій ми змінити не можемо, а ось вплинути на статистики 2% і 4% ми спроможні (в спосіб уведення додаткового кеша другого рівня).
25. Маємо процесор з числом циклів (тактових інтервалів) на виконання однієї машинної інструкції рівним одиниці (ЧТІ=1) за умови, що усі посилання на пам'ять задовільняє ідеальний кеш. Тактова частота процесора є 500 МГц. Час доступу до головної пам'яті дорівнює 200 нс, враховуючи всі відпрацювання апаратури виправлення кешових промахів. Нехай також питома вага (в розрахунку на одну інструкцію) кешових промахів складає 5%. В скільки разів можна прискорити машину уведенням додаткового кешу другого рівня (доступ за 20 нс), який є достатньо містким, аби знизити кешові промахи до 2%?
Відповідь
Покарання за невлучення до однорівневого кеша. що функціонує на частоті процера є
200нс / 2нс = 100 тактових інтервалів. Тоді реальне значення СРІ дорівнюватиме
Реальне СРІ = Ідеальне СРІ + Число циклів пригальмування на одну інструкцію при невлученні до кешу.
Маємо, що Реальне СРІ = 1.0 + 5°/о*100 = 6.0.
Отже, при 5 відсотках невлучення до кешу у машині із наявним лише кешем першого рівня "досягли пригальмування в 6.0/1.0 = 6 разів.
У дворівневій кешевій системі невлучення до кешу першого рівня автоматично спричинює звернення до кешу другого рівня. Якщо кеш другого рівня забезпечує час вибирання даних як 20 нс (50 МГц). тоді покарання за звернення до кешу другого рівня є 20 нс і 2 нс = 10 тактових інтервалів.
Ясно, шо у машини із дворівневим кешем реальне число СРІ для кожної інструкції визначиться сумою ідеального СРІ плюс сума покарань за невлучення до кожного із двох кешів ( у найгіршому випадку маємо невлучення як до першого, так і до другого кешу, а от до головної пам'яті влучаємо завжди). Тоді
Реальне СРІ = Ідеальне СРІ + зважені (затримки кешу першого рівня +затримки кешу другого рівня).
Отже. Реальне СРІ = 1 + 5%* 10 + 2°/о* 100= 3.5.
Тобто, уведення дворівневої ієрархії кеш-пам'яті зменшило прнгальмування із б-ти до 3.5 тактових інтервалів в розрахунку на одну інструкцію..
Зауважимо при цьому, шо кеш другого рівня є значно повільнішим від кеша перщого рівня (в 10/1 = 10 разів). Проте він задовільняє 3/5 = 60 % невлучень до кешу* першого рівня і лише 40% цих невлучень пересилає до пам'яті. Ясно, що для кешу другого рівня важлива не швидкодія, а спроможність задовільняти найбільший відсоток промахів кешу першого рівня. Саме через це кеш другого рівня реалізують як частково асоціативний кеш. тобто, повільніше від кешу із прямим відбиттям, але із збільшеною спроможністю щодо обсягу кешованої інформації.
26. Розрахувати час читання/запису 0,5 КВ для дискової пам'яті, яка має наступні характеристики:
середній час пошуку 512 байтового сектора (seek time) дорівнює 5 мс;
середня затримка ротації (average rotation latency; її знаходять як час оберту диску на 180 градусів); для диску з 10000 обертами на хвилину (10000 RPM) отримуємо середній час ротації = 0.5/10000 = 3.0 мс,
час пересилання інформації з магнітної пластини до контролера диску дорівнює 40 MBps (мегабайтів на секунду) для дисків з 10000 RPM;
затримка контролера в середньому складає 0.1 мс.
Відповідь
Час читання/запису = 5мс + 0.5/10000RPM + 0.5КВ/40MBps + 0.1 мс = 5мс + 3мс + 0.013мс +0.1мс = 8.11 мс.
27. Порівняти часові витрати флеш-диска з часовими витратами магнітного диска для випадку читання і запису 64-KБ блоків з флеш-пам’яті і з магнітного диску. Нехай флеш диск вимагає 65 нс для читання одного байту, 1.5 мкс для запису одного байту та 5 мс для витирання 4KБ даних. Магнітний диск IBM Microdrive має наступні параметри: середній час пошуку 12 мс, швидкість обертання шпінделя 3600 RPM (обертів на хвилину),швидкість пересилання даних від 2.6 до 4.2 МБ/сек. Виміряний час пошуку складає 1/3 від середнього значення. Стартова затримка контролера є 0.1 мс. Дані на диску зберігає його зовнішний трек, що надає найвищу швидкодію пересилання даних 4.2 МБ/сек.
Відповідь
Магнітний диск:
Середній час читання/запису = seek time + rotate time + transfer time + controller overhead =
= 12mc/3 + 0.5/3600 RPM + 64 KB/4.2 MBps + 0/1 мс = 4 + 8.3 + 14.9 +0.1 =27.3 мс.
Флеш диск:
Час читання = 64 KB/ (1B/65 нс) = 4.3 мс.
Час витирання та час запису = 64KB/ (4КВ/5мс) + 64 KB/ (1 В/1.5 мкс) =
80 мс + 98304 мкс = 178.3 мс.
28. Система (пам’ять і шина) підтримують блоковане читання пам’яті з довжиною від 4 до 16-ти 32-х бітових слів.
64-бітова синхронна шина тактується частотою 200 МГц (5 нс); кожне 64-бітове пересилання відбувається за один тактовий інтервал (цикл); один тактовий інтервал потрібен для пересилання адреси до пам’яті.
Два порожні тактові інтервали на шині розмежовують сусідні читання пам’яті.
Пам’ять зчитує перші чотири слови за 200 нс; кожний наступний блок з чотирьох слів зчитується за 20 нс. Коли шина пересилає щойно зчитані дані, тоді читання наступних чотирьох слів може перекриватися в часі з цим пересиланням.
Знайти перепускну спроможність шини (вимірюється в МБ/с) при пересиланні 256 зчитаних слів 16-словними блоками.
Відповідь:
Для кожної транзакції пересилання 16-словного блоку потрібно:
1 тактовий інтервал на пересилання адреси до пам’яті.
200 нс (40 тактових інтервалів) на читання перших чотирьох слів з пам’яті.
2 тактових інтервали (4 слови містять 4×32 = 2 рази по 64 біти) на пересилання даних від пам’яті, а в межах цих інтервалів розпочинається читання наступного блоку з чотирьох слів.
2 порожніх тактових інтервали поміж пересиланнями, в межах цих інтервалів завершується читання наступного блоку.
Разом маємо 1+40+4×(2+2) = 57 тактових інтервалів на одну транзакцію. Всього потрібно 256/16=16 транзакцій, аби переслати всі дані. Мусимо витратити 57×16 = 912 тактових інтервалів, або 912×5 нс = 4560 нс.
Зараз можна обрахувати ширину смуги пересилання пам’яті:
29. Розрахувати скільки бітів потрібно на реалізацію 64 КБ кеша з прямим відбиттям за умови, що блок кеша має розмір одного слова (4 байти), а адреса пам’яті, що генерує процесор, має довжину 32 біти.
Відповідь:
Кожний блок нашого кешу містить: інформаційне слово (32 біти) плюс тег (поки що з невідомою довжиною), плюс 1 біт валідності (він позначує дійсність (валідність) вмістимого блоку кеша). Відомо, що 64 КБ = 214 чотирибайтових слів. Для однословних блоків кеша отримуємо, що наш кеш містить 214 блоків, для адресування яких потрібно 14 бітів. Зауважимо, що два біти повної 32-х бітової адреси використовуються для розрізнення байтів в межах одного слова, отже прямої участі в адресуванні ці два біти не приймають. Зараз можна знайти невідому бітову довжину тега, що містить кожний блок кеш-пам’яті. Ця довжина дорівнює (32 – 2 ) – 14 = 16 бітів.
Отже, кожний блок нашого кеша з прямим відбиттям містить 32 9інформаційне слово) + 16 (тег) +1 (валідність) = 49 бітів. Блоків є 214 , тому розмір кеша складе 49×16×1024 = 49×16 Кбітів = 784 Кбітів.
30. Виконати суперскалярну диспетчеризацію наступного фрагменту програмного коду :
Loop:
LW R3, 0(R1)
; завантажити елемент масиву
ADDU R3, R3, R2
; додати скаляр до нього з регістру R2
SW 0(R1), R3
; записати результат
ADDI R1, R1, #-4
; декремент покажчика
BNE R1, #0, Loop
; перейти на loop, коли R1 != 0
Відповідь
Перші три інструкції скалярного коду мають залежність даних так само, як і останні дві. Припустимо, що операції load/store виконує другий конвеєр суперскалярної машини. Тоді диспетчеризований суперскалярний код, де скасовано зазначені залежності даних, набуде після автоматичної диспетчеризації наступного виду:
АЛП або інструкція переходу
Інструкція пересилання даних
Такти
Loop:
LW R3, 0(R1)
1
ADDI R1, R1, #-4
2
ADDU R3, R3, R2
3
BNE R1, #0, Loop
SW 0(R1), R3
4
Потрібні часові витрати скоротилися з 5-ти до 4-х тактових інтервалів. Переставлено місцями дві інструкції додавання аби вичерпати небезпеку існуючі у скалярному коді залежності даних. При цьому лише на 4-му такті вдалося завантажити обидва конвеєри. Ідеальний (без врахування несумісності конвеєрів та залежностей даних) випадок забезпечив би часові витрати із значенням 0.5 такту на інструкцію при використанні двох конвеєрів. Ми отримали реальне значення 0.8 = 4/5 такти на одну інструкцію.