
- •Івано-Франківський національний технічний
- •Університет нафти і газу
- •Комп’ютерні системи
- •Конспект лекцій
- •Лекція № 1
- •1.1 Архітектура комп’ютерних систем
- •1.2 Паралельна обробка інформації
- •Контрольні запитання
- •Лекція №2 Основи теорії комп’ютерних систем
- •2.1 Класифікація комп’ютерних систем
- •Рисинук 2.2 - Класи комп’ютерних систем
- •2.2 Паралельні алгоритми
- •2.3 Характеристика типових схем комунікації в багатопроцесорних комп’ютерних системах
- •2.4 Закон Амдала
- •Контрольні запитання
- •Лекція №3 Конвеєрні комп’ютерні системи
- •3.1 Обробка інформації векторним процесором
- •3.2 Процесор з паралельним алп
- •3.3 Структура векторного процесора
- •3.4 Векторно-конвеєрні комп’ютерні системи
- •Контрольні запитання
- •Лекція №4 Матричні комп’ютерні системи
- •4.1 Матричний процесор
- •4.2 Матрична комп’ютерна система
- •If a (умова a) then do в
- •4.3 Архітектура матричних комп’ютерних систем
- •4.4 Структура процесорного елементу
- •4.5 Підключення і відключення процесорних елементів.
- •Контрольні запитання
- •Лекція № 5 Комп’ютерні системи класу simd
- •Контрольні запитання
- •Лекція № 6 Мультипроцесорні комп’ютерні системи
- •6.1 Загальна характеристика мультипроцесорних комп’ютерних систем
- •6.2 Мультипроцесори типу numa
- •6.3 Мультипроцесори типу coma
- •6.4 Мультипроцесорна комп’ютерна система Sun Enterprise 10000:
- •Контрольні запитання
- •Лекція №7 Мультикомп’ютерні комп’ютерні системи
- •7.1 Загальна характеристика мультикомп’ютерних комп’ютерних систем
- •Мультикомп’ютерна кс
- •7.2 Рівні комплексування у кс
- •7.3 Кластери
- •7.4 Топологія кластерних пар
- •7.5 Кластер Beowulf
- •7.6 Кластер ac3 Velocity Cluster
- •7.7 Кластер ncsa nt Supercluster
- •Контрольні запитання
- •Лекція № 8 Комп’ютерні системи з нетрадиційною архітектурою
- •8.1 Асоціативні кс
- •8.2 Систолічні кс
- •8.3 Класифікація структур систол
- •8.4 Кс з наддовгими командами (vliw)
- •8.5 Комп’ютерні системи з явним паралелізмом команд
- •8.6 Кс з обробкою за принципом хвильового фронту
- •8.7 Кс на базі трансп'ютерів і з неоднорідним доступом до пам'яті
- •Контрольні запитання
- •Лекція № 9 Організація пам’яті у комп’ютерних системах
- •9.1 Запам’ятовувальні пристрої комп'ютера
- •9.2 Системи із загальною і розподіленою пам'яттю
- •9.3 Багаторівнева організація загальної пам'яті
- •9.4 Пам'ять з чергуванням адрес
- •9.5 Асоціативна пам'ять
- •Контрольні запитання
- •Лекція № 10 Системи введення-виведення
- •10.1 Мережева базова система введення-виведення netbios
- •10.2 Пристрої для зберігання bios
- •10.3 Виробники bios
- •10.4 Принцип роботи bios
- •Контрольні запитання
- •Лекція № 11 Інтерфейси
- •Контрольні запитання
2.2 Паралельні алгоритми
Поняття паралельного алгоритму (Parallel Algorithm) відноситься до фундаментальних в теорії обчислювальних систем. Це поняття, перш за все, асоціюється з обчислювальними системами з масовим паралелізмом. Паралельний алгоритм - це опис процесу обробки інформації, орієнтований на реалізацію в колективі обчислювачів. Такий алгоритм, на відміну від послідовного, передбачає одночасне виконання множини операцій в межах одного кроку обчислень і як послідовний алгоритм зберігає залежність подальших етапів від результатів попередніх.
Паралельний алгоритм рішення задачі складає основу паралельної програми. Паралельна програма у свою чергу, впливає на алгоритм функціонування колективу обчислювачів. Запис паралельного алгоритму на мові програмування, доступній колективу обчислювачів, називають паралельною програмою. Паралельні алгоритми і програми слід розробляти для складних або трудомістких завдань.
Методи і алгоритми обробки інформації, рішення задач, як правило, - послідовні. Процес “пристосування” методів до реалізації на колективі обчислювачів або процес “розщеплювання” послідовних алгоритмів рішення складних задач називається розпаралелюванням (Paralleling or Multisequencing).
Теоретична і практична діяльність по створенню паралельних алгоритмів і програм обробки інформації називається паралельним програмуванням (Parallel or Concurrent Programming). Якість паралельного алгоритму (або його ефективність) визначається методикою розпаралелювання складних завдань.
Існує два підходи при розпаралелюванні завдань: локальне і глобальне (великоблочне) розпаралелювання (рис.2.3). Перший підхід орієнтований на розкладання алгоритму рішення складної задачі на гранично прості блоки (операції або оператори) і вимагає виділення для кожного етапу обчислень максимально можливої кількості одночасно виконуваних блоків. Процес такого розпаралелювання дуже трудомісткий, а отримувані паралельні алгоритми характеризуються не тільки структурною неоднорідністю, але і істотно різними об'ємами операцій на різних етапах обчислень. Останнє є серйозною перешкодою на шляху (автоматизації) розпаралелювання і забезпечення ефективної експлуатації ресурсів колективу обчислювачів. Локальне розпаралелювання дозволяє оцінити граничні можливості колективу обчислювачів при рішенні складних задач, отримати граничні оцінки по розпаралелюванню складних завдань.
Другий підхід орієнтований на розбиття складного завдання на великі блоки-підзадачі, між якими існує слабкий зв'язок. Тоді в алгоритмах, побудованих на основі великоблочного розпаралелювання, операції обміну між підзадачами складатимуть незначну частину в порівнянні із загальним числом операцій в кожній підзадачі. Такі підзадачі називають гілками паралельного алгоритму, а відповідні їм програми - гілками паралельної програми.
Рисунок 2.3 - Схеми паралельних алгоритмів
Одним з конструктивних прийомів великоблочного розпаралелювання складних завдань є розпаралелювання по циклах. Прийом дозволяє представити процес рішення задачі у вигляді паралельних гілок, отриманих розщеплюванням циклу на частини, число яких рівне числу повторень циклу. На вході і виході з циклу процес обчислень - послідовний; частка послідовних ділянок в загальному часі рішення задачі незначна.
Як правило, послідовні ділянки мають місце на початку і в кінці паралельної програми. На початковій ділянці здійснюється ініціалізація програми і введення початкових даних, а на кінцевому - виведення результатів (запис в архівні файли). Також можливі реалізації паралельного введення і виведення інформації.
Послідовні ділянки в паралельній програмі також можуть мати місце, якщо використовуються негрупові обміни інформацією між гілками (обчислювачами).
Паралелізм - основа високопродуктивної роботи всіх підсистем обчислювальних машин. Організація пам'яті будь-якого рівня ієрархії, організація системного введення/виведення, організація мультиплексування шин і т.д. базуються на принципах паралельної обробки запитів. Сучасні операційні системи є багатозадачними і розрахованими на багато користувачів, імітують паралельне виконання програм за допомогою механізму переривань.
Розвиток процессоробудування також орієнтований на розпаралелювання операцій, тобто на виконання процесором більшого числа операцій за такт. Ключовими ступенями розвитку архітектури процесорів стали гіперконвеєризація, суперскалярність, векторне процесування (технологія SIMD), архітектура VLIW. Всі ступені були орієнтовані на підвищення ступеня паралелізму виконання.
В даний час суперсервера є мультипроцесорними системами, а в процесорах активно використовується паралелізм рівня потоків.
Розпаралелювання операцій - перспективний шлях підвищення продуктивності обчислень. Згідно закону Мура число транзисторів експоненціально росте, що дозволяє в даний час включати до складу CPU велику кількість виконавчих пристроїв самого різного призначення.
У 70-і роки став активно застосовуватися принцип конвеєризації обчислень. Конвеєр Intel Pentium 4 складається з 20 ступенів. Таке розпаралелювання на мікрорівні - перший крок на шляху еволюції процесорів (рис.2.4). На принципах конвеєризації базуються і зовнішні пристрої. Наприклад, динамічна пам'ять (організація чергування банків) або зовнішня пам'ять (організація RAID).
Використання паралелізму мікрорівня дозволяло лише зменшувати CPI (Cycles Per Instruction - число тактів, необхідних для виконання однієї інструкції), оскільки мільйони транзисторів при виконанні одиночної інструкції простоювали. CPI = загальна кількість тактів / число виконаних команд.
Рисунок 2.4 – Рівні паралелізму
На наступному етапі еволюції в 80-і роки стали використовувати паралелізм рівня команд за допомогою розміщення в CPU відразу декількох конвеєрів (рис.2.4). Такі суперскалярні CPU дозволяли досягати CPI<2.
Сучасні методики підвищення ILP засновані на використанні процесорів класу SIMD. Це векторне процесування, матричні процесори, архітектура VLIW.
Паралелізм рівня потоків і рівня завдань застосовується в процесорах класу MIMD (рис.2.4).
Паралелізм всіх рівнів властивий не тільки процесорам загального призначення (GPP), але і процесорам спеціального призначення (ASP (Application-Specific Processor), DSP (Digital Signal Processor)).
Іноді класифікують паралелізм по ступені гранулярності як відношення об'єму обчислень до об'єму комунікацій. Розрізняють дрібнозернистий, средньозернистий і грубозернистий паралелізм.
Дрібнозернистий паралелізм забезпечує сам CPU, а компілятор може і повинен йому допомогти.
Средньозернистий паралелізм - реалізується програмістом, який розробляє багатопотокові алгоритми. Тут роль компілятора полягає у виборі оптимальної послідовності інструкцій.
Грубозернистий паралелізм забезпечує ОС.
Системи (мови) паралельного програмування
В рамках паралельної моделі програмування існують різні підходи, орієнтовані на різну архітектуру високопродуктивних обчислювальних систем і різні інструментальні засоби. Перерахуємо деякі з них.
Модель передачі повідомлень
Основні особливості даного підходу:
- програма породжує декілька завдань;
- кожному завданню привласнюється свій унікальний ідентифікатор;
- взаємодія здійснюється за допомогою відправки і прийому повідомлень;
- нові завдання можуть створюватися під час виконання паралельної програми, декілька завдань можуть виконуватися на одному процесорі.
Основними інструментами програмування є спеціалізовані бібліотеки (MPI - Message Passing Interface, PVM - Parallel Virtual Machines).
Модель паралелізму даних
Основні особливості даного підходу:
- одна операція застосовується до безлічі елементів структури даних. Програма містить послідовність таких операцій;
- "зернистість" обчислень мала;
- програміст повинен вказати транслятору, як дані слід розподілити між завданнями;
- при програмуванні на основі паралелізму даних часто використовуються спеціалізовані мови або надбудови над мовами DVM Fortran, HPF (High Perfomance Fortran) та інші.