- •7.091501 – Комп’ютерні системи та мережі
- •7.091503 – Спеціалізовані комп’ютерні системи
- •7.091501 – Комп’ютерні системи та мережі
- •7.091503 – Спеціалізовані комп’ютерні системи
- •2. Надійність і відмовостійкість
- •3. Масштабованість
- •4. Сумісність і мобільність програмного забезпечення
- •5. Класифікація комп'ютерів по галузям застосування Персональні комп'ютери та робочі станції
- •Сервери
- •Мейнфрейми
- •Кластерні архітектури
- •Контрольні запитання
- •Тести tpc
- •2. Тест tpc-a
- •3. Тест tpc-b
- •4. Тест tpc-c
- •5. Майбутні тести tpc
- •2. Архітектура системи команд. Класифікація процесорів (cisc і risc)
- •3. Методи адресації та типи даних Методи адресації
- •4. Типи команд
- •5. Команди керування потоком команд
- •6. Типи й розміри операндів
- •2. Найпростіша організація конвеєра й оцінка його продуктивності
- •3. Структурні конфлікти й способи їхньої мінімізації
- •4. Конфлікти за даними, зупинка конвеєра й реалізація механізму обходів
- •5. Класифікація конфліктів за даними
- •6. Конфлікти за даними, що призводять до призупинки конвеєра
- •7. Методика планування компілятора для усунення конфліктів за даними
- •Контрольні запитання
- •2. Зниження втрат на виконання команд умовного переходу
- •Метод вичікування
- •Метод повернення
- •Затримані переходи
- •3. Статичне прогнозування умовних переходів: використання технології компіляторів
- •2. Обробка багатотактних операцій і механізми обходів у довгих конвеєрах
- •3. Конфлікти й прискорені пересилання в довгих конвеєрах
- •4. Підтримка точних переривань
- •Контрольні запитання
- •2. Паралелізм рівня команд: залежності й конфлікти за даними
- •Залежності
- •3. Паралелізм рівня циклу: концепції та методи
- •4. Основи планування завантаження конвеєра й розгортання циклів
- •Контрольні запитання
- •2. Динамічна оптимізація із централізованою схемою виявлення конфліктів
- •2. Подальше зменшення зупинок по керуванню: буфера цільових адрес переходів
- •Контрольні запитання
- •Процесор з архітектурою 80x86 і Pentium.
- •Особливості процесорів з архітектурою spark компанії Sun Microsystems.
- •Процесори pa-risc компанії Newlett-Packard
- •2.Особливості процесорів з архітектурою sparc компанії Sun Microsystems
- •Процесори pa-risc компанії Hewlett-Packard
- •Контрольні запитання
- •Процесор mc88110 компанії Motorola.
- •Особливості архітектури mips компанії mips Technology.
- •Особливості архітектури Alpha компанії dec.
- •Особливості архітектури power компанії ibm і power pc компанії Motorola, Apple і ibm.
- •2.Особливості архітектури mips компанії mips Technology
- •3.Особливості архітектури Alpha компанії dec
- •4.Особливості архітектури power компанії ibm і PowerPc компаній Motorola, Apple і ibm
- •Архітектура power
- •Еволюція архітектури power у напрямку архітектури PowerPc
- •Процесор PowerPc 603
- •Контрольні запитання
- •Термінологія в області паралельної обробки .
- •Питання створення програмного забезпечення.
- •Ахітектура паралельної обробки.
- •2.Питання створення програмного забезпечення.
- •1) Язикові розширення.
- •2) Розширення компіляторів.
- •3) Додавання нового язикового рівня.
- •4) Нова мова.
- •3.Архітектура паралельної обробки.
- •4.Елементи теорії конкурентних процесів. Події та процеси
- •Особливості мов конкурентного програмування
- •Моделі конкурентних процесів
- •Взаємодія процесів, синхронізація й передача даних
- •2. Внутрішня архітектура трансп’ютера
- •3. Послідовна обробка
- •Регістри трансп’ютера
- •4. Інструкції
- •Безпосередні функції
- •Непрямі функції
- •Ефективність кодування
- •5. Підтримка паралелізму
- •6. Зв'язок
- •Лінії зв'язку
- •7. Таймер
- •8. Альтернативне виконання
- •9. Інструкції із плаваючою крапкою
- •Контрольні запитання
- •2. Найпростіші процеси-примітиви
- •3. Послідовні процеси-композиції
- •4. Паралельні процеси
- •5. Канали зв'язку
- •6. Конструктор альтернативного процесу
- •7. Описи
- •8. Масиви
- •9. Оголошення процесів
- •10. Цикли і масиви процесів
- •Контрольні запитання
- •2. Структури програмування
- •Прості паралельні процеси
- •Синхронізація за допомогою керуючих сигналів
- •3. Мовні засоби для програмування в реальному масштабі часу
- •4. Використання мови оккам для рішення завдань системного програмування
- •Контрольні запитання
- •Рекомендована література
4. Типи команд
Команди традиційного машинного рівня можна розділити на кілька типів, які показані на рис. 3.
Тип операції |
Приклади |
Арифметичні й логічні |
Цілочислені арифметичні й логічні операції: додавання, вирахування, логічне додавання, логічне множення й т.д. |
Пересилання даних |
Операції завантаження/запису |
Керування потоком команд |
Безумовні й умовні переходи, виклики процедур і повернення |
Системні операції |
Системні виклики, команди керування віртуальною пам'яттю й т.д. |
Операції із плаваючою крапкою |
Операції додавання, вирахування, множення й розподіли над речовинними числами |
Десяткові операції |
Десяткове додавання, множення, перетворення форматів і т.д. |
Операції над рядками |
Пересилання, порівняння й пошук рядків |
Рис. 3 Основні типи команд
5. Команди керування потоком команд
В англійській мові для вказування команд безумовного переходу, як правило, використовується термін jump, а для команд умовного переходу - термін branch, хоча різні постачальники необов'язково дотримуються цієї термінології. Наприклад компанія Intel використовує термін jump і для умовних, і для безумовних переходів. Можна виділити чотири основних типи команд для керування потоком команд: умовні переходи, безумовні переходи, виклики процедур і повернення із процедур.
Частота використання цих команд по статистиці приблизно наступна. У програмах домінують команди умовного переходу. Серед зазначених команд керування на різних програмах частота їхнього використання коливається від 66 до 78%. Наступні по частоті використання - команди безумовного переходу (від 12 до 18%). Частота переходів на виконання процедур і повернення з них становить від 10 до 16%.
При цьому приблизно 90% команд безумовного переходу виконуються щодо лічильника команд. Для команд переходу адреса переходу повинна бути завжди заздалегідь відома. Це не стосується адрес повернення, які не відомі під час компіляції програми й повинні визначатися під час її роботи. Найбільш простий спосіб визначення адреси переходу полягає у вказівці його положення щодо поточного значення лічильника команд (за допомогою зсуву в команді), і такі переходи називаються переходами щодо лічильника команд. Перевагою такого методу адресації є те, що адреси переходів, як правило, розташовані недалеко від поточної адреси виконуваної команди та вказівка щодо поточного значення лічильника команд вимагає невеликої кількості біт у зсуві. Крім того, використання адресації щодо лічильника команд дозволяє програмі виконуватися в будь-якім місці пам'яті, незалежно від того, куди вона була завантажена. Тобто цей метод адресації дозволяє автоматично створювати переміщувані програми.
Реалізація повернень і переходів по непрямій адресі, у яких адреса не відома під час компіляції програми, вимагає методів адресації, відмінних від адресації щодо лічильника команд. У цьому випадку адреса переходу повинна визначатися динамічно під час роботи програми. Найбільш простий спосіб полягає у вказівці регістра для зберігання адреси повернення, або для переходу може дозволятися будь-який метод адресації для обчислення адреси переходу.
Одним із ключових питань реалізації команд переходу полягає в тому, наскільки далеко цільова адреса переходу перебуває від самої команди переходу? І на це питання статистика використання команд дає відповідь: у переважній більшості випадків перехід іде в межах 3 - 7 команд щодо команди переходу, причому в 75% випадків виконуються переходи в напрямку збільшення адреси, тобто вперед по програмі.
Оскільки більшість команд керування потоком команд становлять команди умовного переходу, важливим питанням реалізації архітектури є визначення умов переходу. Для цього використовуються три різних підходи. При першому з них в архітектурі процесора передбачається спеціальний регістр, розряди якого відповідають певним кодам умов. Команди умовного переходу перевіряють ці умови в процесі свого виконання. Перевагою такого підходу є те, що іноді установка коду умови й перехід по ньому можуть бути виконані без додаткових втрат часу, що, втім, буває досить рідко. А недоліками такого підходу є те, що, по-перше, з'являються нові стани машини, за яких необхідно стежити (ховати при перериванні й відновлювати при поверненні з нього). По-друге, і що дуже важливо для сучасних високошвидкісних конвеєрних архітектур, коди умов обмежують порядок виконання команд у потоці, оскільки їхнє основне призначення полягає в передачі коду умови команді умовного переходу.
Другий метод полягає в простому використанні довільного регістра (можливо одного виділеного) загального призначення. У цьому випадку виконується перевірка стану цього регістра, у який попередньо міститься результат операції порівняння. Недоліком цього підходу є необхідність виділення в програмі для аналізу кодів умов спеціального регістра.
Третій метод припускає об'єднання команди порівняння й переходу в одній команді. Недоліком такого підходу є те, що ця об'єднана команда досить складна для реалізації (в одній команді треба вказати й тип умови, і константу для порівняння й адресу переходу). Тому в таких машинах часто використовується компромісний варіант, коли для деяких кодів умов використовуються такі команди, наприклад, для порівняння з нулем, а для більше складних умов використовується регістр умов. Часто для аналізу результатів команд порівняння для цілочисельних операцій і для операцій із плаваючою крапкою використовується різна техніка, хоча це можна пояснити й тим, що в програмах кількість переходів за умовами виконання операцій із плаваючою крапкою значно менше загальної кількості переходів, обумовлених результатами роботи цілочисельної арифметики.
Одним з найбільш помітних властивостей більшості програм є перевага в них порівнянь на умову дорівнює/нерівно й порівнянь із нулем. Тому в ряді архитектур такі команди виділяються в окремий піднабор, особливо при використанні команд типу "зрівняти й перейти".
Говорять, що перехід виконується, якщо дійсною є умова, що перевіряє команда умовного переходу. У цьому випадку виконується перехід на адресу, що задана командою переходу. Тому всі команди безумовного переходу завжди виконувані. По статистиці виявляється, що переходи назад по програмі в більшості випадків використаються для організації циклів, причому приблизно 60% з них становлять виконувані переходи. У загальному випадку поводження команд умовного переходу залежить від конкретної прикладної програми, однак іноді позначається й залежність від компілятора. Такі залежності від компілятора виникають внаслідок змін потоку керування, виконуваного оптимізуючого компіляторами для прискорення виконання циклів.
Виклики процедур і повернення припускають передачу керування й можливе збереження деякого стану. Як мінімум, необхідно вміти десь зберігати адресу повернення. Деякі архітектури пропонують апаратні механізми для збереження стану регістрів, в інших випадках передбачається вставка в програму команд самим компілятором. Є два основних види угод щодо збереження стану регістрів. Збереження визиваючої (caller saving) програмою означає, що визиваюча процедура повинна зберігати свої регістри, які вона хоче використати після повернення в неї. Збереження викликаною процедурою припускає, що викликана процедура повинна зберегти регістри, які вона збирається використати. Є випадки, коли повинне використатися збереження визиваючою процедурою для забезпечення доступу до глобальним змінних, які повинні бути доступні для обох процедур.