ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 24.12.2021
Просмотров: 6794
Скачиваний: 22
95
На цьому прикладі основна програма починається з комірки за адресою 010. Ця програма включає звернення до підпрограми SUB1, яка починається з комірки за адресою 500. Коли виконується ця команда виклику, процесор призупиняє виконання основної програми і починає виконання підпрограми SUB1 шляхом вибору наступної команди з комірки 500. Всередині підпрограми SUB1 є два звернення до підпрограми SUB2, яка починається з комірки за адресою 800. В обох цих випадках призупиняється виконання підпрограми SUB1 і виконується підпрограма SUB2. Команда Return вказує процесору повернутись назад до програми SUB1 та продовжити виконання команди, яка іде за відповідною командою виклику Call. Ці звернення між основною програмою та підпрограмами показані на рис. 3.10.
В табл. 3.4 як приклад наведені команди передачі керування комп'ютера з спрощеною системою команд DLX.
96
3 |
J,JR |
Jumps; 26-розрядне зміщення до PC + 4 (J) або цільового регістра (JR) |
4 |
JAL JALR |
Jump and link; збереження РС+8 до R31, ціллю є 26-розрядне зміщення до PC + 4 (JAL) чи регістр (JALR) |
3.2.5. Команди введєння-виведення
Команди введєння-виведення значно змінюються від одного комп'ютера до іншого. Базовими типами команд введєння-виведення є програмоване введєння-виведення, введєння-виведення за перериваннями та прямий доступ до пам'яті. При розгляді цих способів введєння-виведення будуть розглянуті і відповідні команди.
3.2.6. Принципи формування системи команд комп'ютера
При розробці комп'ютера необхідно враховувати багато особливостей вибору системи команд. З одного боку система команд повинна бути функціонально повною, тобто комп'ютер повинен забезпечувати виконання всіх заданих функцій. З іншого боку система команд має бути ортогональною, тобто не повинна бути надлишковою. Для нового комп'ютера, який є розширенням відповідної серії, першочерговою є сумісність програми, які виконуються на одному комп'ютері, повинні виконуватись і на іншому комп'ютері. Для збільшення терміну використання важливим є розширення адресного діапазону та однорідності адресного простору. І, нарешті, важливим є розмір та організація самого формату команди. Розглянемо ці особливості детальніше
Є багато рівнів повноти системи команд. На найнижчому рівні всі комп'ютерні операції можуть бути виконані на базі операції інверсії логічного множення (NAND). Відповідно команда умовного переходу, яка також зберігає вміст програмного лічильника, забезпечує виконання всіх пересилок в комп'ютері. Тому можна створити повну систему команд на базі цих операцій. Теоретично система команд комп'ютера може включати лише одну команду. Відомий комп'ютер з назвою Single Instruction Computer (SIC), який є прикладом комп'ютера з нижньою межею кількості команд Єдиною командою SIC є команда "відняти та перейти за умови, що отримано негативний результат" (Subtract and Branch if Negative). Зрозуміло, що коли "запрограмувати" цією командою усі інші команди деякої реальної машини, то шляхом повного перебирання можна довести повноту системи команд, яку складено лише з однієї команди sbn. Недоліки SIC є зрозумілими, принаймні, на прикладі програмування однією командою операції множення (ділення тощо). Тобто програми на базі простих операцій є дуже складними.
Існує фундаментальний зв'язок між простотою процесора і складністю програми. Оскільки, як було показано вище, виконувати обробку даних з застосуванням однієї команди недоцільно, в реальних комп'ютерах застосовується система команд, до складу якої входить широкий спектр команд обробки даних, переміщення даних, передачі керування та введєння-виведення
В ранніх комп'ютерах розробники старалися включити в систему команд максимальну 'їх кількість з тим, щоб забезпечити програмістам гнучкість та можливість вибору найдоцільнішої для конкретного випадку команди. Але з ростом досвіду та з проведених досліджень стало зрозумілим, що далеко не всі можливі команди доцільно включати в систему команд комп'ютера. Адже, з одного боку, це ускладнює формат команди, а в результаті і сам комп'ютер, а з іншого боку, багато команд дуже рідко використовуються
97
на практиці. Тому кращим є варіант реалізації таких команд на основі інших. Для прикладу на рис. 3.11 подано середню частоту використання команд передачі керування в різних задачах при обробці даних з фіксованою (темніший колір лінії) та з рухомою комою (світліший колір лінії).
Як видно з рисунка, найчастіше використовуються команди умовного переходу, тоді як команди звертання до підпрограм і особливо команди безумовного переходу використовуються досить рідко. Зрозуміло, що при потребі скорочення кількості команд доцільно залишити саме команди умовного переходу. Більше того, зважаючи на частоту використання при реалізації, доцільно шукати шляхи прискорення виконання саме цих команд. Проаналізуємо далі самі команди умовного переходу, оскільки їх є декілька типів, і кожен тип також має свою частоту використання (рис. 3.12).
Як видно з рисунка, деякі типи команд умовного переходу в вибраних тестових програмах не використовуються взагалі (команда „більше ніж" для чисел з фіксованою та рухомою комою, команда „більше ніж або рівне" для чисел з рухомою комою), або ви-
98
користовуються досить рідко. Оскільки ці команди взаємозамінні, немає сенсу реалізації їх всіх і доцільно обмежитись найуживанішими. Подібний аналіз проводиться і для інших типів команд з метою оптимізації системи команд комп'ютера.
Ортогональність характеризує незалежність команд. Набір команд є ортогональним, якщо існує тільки один простий шлях виконання набору операцій. Наприклад, для виконання арифметичних операцій можуть бути використані базові булеві операції, але час їх виконання в цьому випадку буде дуже великим. Це означає, що існування арифметичних операцій поряд з булевими не порушує ортогональності.
Існують спеціальні оптимізуючі компілятори, які слідкують за повнотою системи команд та їх ортогональністю.
Сумісність як і повнота та ортогональність має багато рівнів. Це може бути сумісність по вихідному коду, або по одному з об'єктних кодів. Близьким до сумісності є поняття взаємозамінності, тобто можливості виконання тієї ж програми на різних апаратних засобах.
3.2.7. Конвеєрне виконання команд
Конвеєрне виконання команд подібне до роботи конвеєра складальної лінії на заводі, наприклад автомобільному. На складальній лінії вироби проходять через однакові виробничі стадії. Одночасно на лінії знаходиться кількість виробів, рівна кількості виробничих стадій. Проходячи через всі виробничі стадії, виріб приймає кінцеві параметри. Час виготовлення одного виробу є рівним часу його проходження через всі виробничі стадії, але при виготовленні багатьох виробів, скажемо п, час, який припадає на виготовлення всіх виробів, є рівним:
T = tm + t(n- l) = t(m + n- 1),
де m - кількість виробничих стадій, t - час виконання однієї виробничої стадії, а час, який припадає на виготовлення одного виробу, є рівним:
Тв = t(m + п - 1)/п.
При n >> m час Тв, який припадає на виготовлення одного виробу, наближається до часу t виконання однієї виробничої стадії.
Подібно до виготовлення виробу, команда також має кілька послідовних стадій виконання, як це показано на рис. 3.2. Тому логічним виглядає використання і тут принципу конвеєра.
Для початку розглянемо поділ процесу виконання команди на дві стадії: вибірку та виконання. В процесі стадії виконання команди є проміжки часу, коли немає звернень до пам'яті. Цей час може бути використаним для вибірки наступної команди паралельно з виконанням поточної команди. На рис. 3.13 показано цей підхід.
99
Конвеєр має два незалежних яруси. Перший ярус виконує операцію вибірки та буфе-ризації (короткотермінового запам'ятовування) команди. Коли другий ярус звільняється від роботи, перший ярус передає йому буферизовану команду. Коли в другому ярусі виконується команда, в першому ярусі вибирається наступна команда. Така операція називається попередньою вибіркою команди (instruction prefetch) або суміщенням вибірки (fetch overlap).
Зрозуміло, що описаний процес прискорює виконання команди. Якби операції вибірки та виконання мали однаковий час виконання, то цикл виконання команди міг би бути зменшеним вдвоє. Однак це не зовсім так через наступні причини:
-
Стадія виконання значно довша стадії вибірки, оскільки вона вимагає виконання операцій зчитування та запису операндів та самої операції. Тому перший ярус повинен чекати деякий час, поки звільниться його буфер.
-
При появі команди умовного переходу адреса наступної команди до завершення поточної команди невідома. Тому перший ярус змушений чекати до завершення роботи другого ярусу. Після цього вже другий ярус повинен чекати на завершення роботи першим ярусом.
Час, який втрачається через другу причину, може бути зменшений шляхом використання механізму передбачення. Тут може бути використане наступне правило: коли команда умовного переходу поступає з ярусу вибірки на ярус виконання, в ярусі вибірки проводиться вибірка із пам'яті наступної команди після команди умовного переходу. Тоді в випадку відсутності умовного переходу втрат часу не буде. Коли ж буде умовний перехід, то вибрана команда повинна бути знехтувана і вибрана нова команда.
Хоча розглянуті дві причини знижують потенційну ефективність двоярусного конвеєра, в цілому виграш незаперечний. Для подальшого підвищення продуктивності потрібно збільшувати кількість ярусів конвеєра. Розглянемо поділ виконання команди на наступні стадії:
-
Вибірка команди (ВК): зчитування в буфер очікуваної наступною команди.
-
Дешифрування команди (ДК): визначення типу вибраної команди та специфікаторів операндів.
-
Визначення адрес даних (ВА): обчислення адрес даних, необхідних для виконання команди з врахуванням можливості використання різних способів адресації.
-
Вибірка операндів (ВО): зчитування даних із пам'яті в регістри процесора.
-
Виконання команди (KB): виконання вказаної операції та, при наявності, запам'ятовування результату в визначеному регістрі.
-
Запис результату (ЗР): запам'ятовування результату в пам'яті.
При такому поділі час тривалості різних стадій виконання команди буде приблизно рівним. Тоді, як видно з табл. 3.5, шестиярусний конвеєр може зменшити час виконання 9 команд з 54 тактів до 14 тактів.
|
|
|
|
|
|
|
|
|
|
|
|
|
Таблиця 3.5 |
|
Номер такту |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
Команда 1 |
ВК |
ДК |
ВА |
ВО |
KB |
ЗР |
|
|
|
|
|
|
|
|
Команда 2 |
|
ВК |
ДК |
ВА |
ВО |
KB |
ЗР |
|
|
|
|
|
|
|
Команда 3 |
|
|
ВК |
дк |
ВА |
ВО |
KB |
ЗР |
|
|
|
|
|
|