- •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. Використання мови оккам для рішення завдань системного програмування
- •Контрольні запитання
- •Рекомендована література
3. Паралелізм рівня циклу: концепції та методи
Паралелізм рівня циклу звичайно аналізується на рівні вихідного тексту програми або близького до нього, у той час як аналіз паралелізму рівня команд головним чином виконується, коли команди вже сгенерированы компілятором. Аналіз на рівні циклів включає визначення того, які залежності існують між операндами в циклі в межах однієї ітерації циклу. Тепер ми будемо розглядати тільки залежності за даними, які виникають, коли операнд записується в деякій крапці й зчитується в якійсь більше пізній крапці. Ми обговоримо коротко залежності по іменах. Аналіз паралелізму рівня циклу фокусируется на визначенні того, чи залежать за даними звертання до даних у наступній ітерації від значень даних, вироблюваних у більше ранній ітерації.
Розглянемо наступний цикл:
for (i=1; i<=100; i=i+1) {
A[i+1] = A[i] + C[i]; /* S1 */
B[i+1] = B[i] + A[i+1];} /*S2*/
}
Припустимо, що A, B і C являють собою окремі, що не перекриваються масиви. (На практиці іноді масиви можуть бути тіж самі або перекриватися. Оскільки масиви можуть передаватися як параметри деякій процедурі, що містить цей цикл, визначення того, чи перекриваються масиви або вони збігаються, вимагає витонченого, межпроцедурного аналізу програми). Які залежності за даними мають місце між операторами цього циклу?
Є дві різних залежності:
S1 використає значення, що обчислює оператором S1 на більше ранній ітерації, оскільки ітерація i обчислює A[i+1], що зчитується в ітерації i+1. Те ж саме справедливо для оператора S2 для B[i] і B[i+1].
S2 використає значення A[i+1], що обчислює оператором S1 у тій же самій ітерації.
Ці дві залежності відрізняються друг від друга й мають різний ефект. Щоб побачити, чим вони відрізняються, припустимо, що в кожний момент часу існує тільки одна із цих залежностей. Розглянемо залежність оператора S1 від більше ранньої ітерації S1. Ця залежність (loop-carried dependence) означає, що між різними ітераціями циклу існує залежність за даними. Більше того, оскільки оператор S1 залежить від самого себе, послідовні ітерації оператора S1 повинні виконуватися впорядковано.
Друга залежність (S2 залежить від S1) не передається від ітерації до ітерації. Таким чином, якби це була єдина залежність, кілька ітерацій циклу могли б виконуватися паралельно, за умови, що кожна пара операторів в ітерації підтримується в заданому порядку.
Є третій тип залежностей за даними, що виникає в циклах, як показано в наступному прикладі.
Розглянемо цикл:
for (i=1; i<=100; i=i+1) {
A[i] = A[i] + B[i]; /* S1 */
B[i+1] = C[i] + D[i]; /* S2 */
}
Оператор S1 використає значення, що привласнюється оператором S2 у попередній ітерації, так що має місце залежність між S2 і S1 між ітераціями.
Незважаючи на цю залежність, цей цикл може бути зроблений паралельним. Як і в більше ранньому циклі ця залежність не циклічна: жоден з операторів не залежить сам від себе й хоча S1 залежить від S2, S2 не залежить від S1. Цикл є паралельним, якщо тільки відсутня циклічна залежність.
Хоча у вищенаведеному циклі відсутні циклічні залежності, щоб виявити паралелізм, він повинен бути перетворений в іншу структуру. Тут варто зробити два важливих зауваження:
Залежність від S1 до S2 відсутній. Якби вона була, то в залежностях з'явився б цикл і цикл не був би паралельним. Внаслідок відсутності інших залежностей, перестановка двох операторів не буде впливати на виконання оператора S2.
У першій ітерації циклу оператор S1 залежить від значення B[1], що обчислює перед початком циклу.
Ці два зауваження дозволяють нам замінити вище наведений цикл наступною послідовністю:
A[1] = A[1] + B[1];
for (i=1; i<=99; i=i+1) {
B[i+1] = C[i] + D[i];
A[i+1] = A[i+1] + B[i+1];
}
B[101] = C[100] + D[100];
Тепер ітерації циклу можуть виконуватися з перекриттям, за умови, що оператори в кожній ітерації виконуються в заданому порядку. Є безліч такого роду перетворень, які реструктурируют цикл для виявлення паралелізму.
Основна увага в частині, що залишилася, від нашого розгляду, зосереджена на методах виявлення паралелізму рівня команд. Залежності за даними у відкомпільованих програмах являють собою обмеження, які впливають на те, яка ступінь паралелізму може бути використана. Питання полягає в тім, щоб підійти до цієї межі шляхом мінімізації дійсних конфліктів і пов'язаних з ними призупинень конвеєра. Методи, які ми вивчаємо стають усе більше витонченими в прагненні використання всього доступного паралелізму при підтримці щирих залежностей за даними в коді програми. Як компілятор, так і апаратура тут грають свою роль: компілятор намагається усунути або мінімізувати залежності, у той час як апаратура намагається запобігти перетворенню залежностей у призупинення конвеєра.