Розвиток архітектури обчислювальних систем

Продовжимо обговорення того, в яких напрямках розвивається архітектура обчислювальних систем.
Цей процес визначається, з одного боку, вимогами більшої ефективності та швидкості обробки інформації, з іншого – появою нових технічних можливостей.
Навіщо потрібні надшвидкі комп’ютери
Незважаючи на стрімко наростаючу продуктивність комп’ютерів, яка кожні 4-5 років практично за найважливішими показниками подвоюється, завжди є класи задач, для яких навіть такий продуктивності не вистачає. Зазначимо деякі з них.
1. Математичні розрахунки, що лежать в основі реалізації математичних моделей багатьох процесів. Гігантські обчислювальні ресурси необхідні для більш надійного та довгострокового прогнозу погоди, для вирішення аерокосмічних завдань, у тому числі і оборонних, для вирішення багатьох інженерних завдань і т. Д.
2. Пошук інформації в гігантських базах даних, що досягають за обсягом збереженої інформації декількох терабайтов (1 терабайт = 1024 Гбайт = 1012байт).
3. Моделювання інтелекту. При всіх фантастичних показниках обсяг оперативної пам’яті сучасних комп’ютерів становить лише малу частку обсягу пам’яті людини.
Як можна прискорити роботу комп’ютера
Повернемося до архітектури комп’ютера четвертого покоління, зображеної на рис. 4.1. У комп’ютера є багато зовнішніх пристроїв, але тільки один, націлений безпосередньо на виконання програми, процесор (контролери не в рахунок, у них інші функції), одна шина і одна оперативна пам’ять. При вирішенні за допомогою такого комп’ютера будь-якої задачі основний цикл роботи складається з наступних етапів:
1) процесор зчитує чергову команду програми;
2) ця команда розшифровується, з оперативної пам’яті беруться зазначені в ній дані, над ними виконується необхідну дію;
3) результати дії записуються в оперативну пам’ять (якщо дія того вимагає) і все повторюється заново, поки не відбудеться зупинка з якоїсь причини.
Звичайно, у міру вдосконалення комп’ютерів у цій схемі з’явилися деякі додаткові можливості: невелика власна пам’ять у процесорів, кеш-пам’ять, так звана конвеєрна обробка, коли процесор, виконуючи поточну команду, «заглядає» в наступну і дещо для її виконання робить. Все це важливо, але в якийсь момент потурбувалися зробити принциповий крок і відмовитися від одиничності головних пристроїв комп’ютера: або процесора, або оперативної пам’яті, або шини, або всього цього разом взятого. Так народилася абсолютно нова архітектура, з якою в даний час зв’язуються, мабуть, великі надії в області зростання продуктивності комп’ютерів, ніж з вдосконаленням окремих вузлів.
Щоб стало більш зрозумілим, навіщо комп’ютера кілька процесорів, обговоримо рішення найпростішої математичної задачі. Є масив з 100 чисел: a1 a2,. . . a100 – Потрібно знайти їх суму.
Немає нічого простіше. І на комп’ютері, і без нього ми, швидше за все, поступимо так: складемо перші два числа, позначимо якось їх суму (наприклад, S), потім додамо до неї третє число, і робитимемо це ще 98 разів. Це приклад послідовного обчислювального процесу.

Оскільки ні в кого з нас немає другої голови, то інакше цю задачу поодинці не вирішити. Але уявімо, що ми вирішуємо її не поодинці, а всім класом (25 осіб). Тоді виникає можливість зовсім іншій послідовності дій:
1. Об’єднати числа в пари – по два на кожного учня (разом розподілимо 50 чисел): наприклад, учень Петя Іванов бере собі a1 і a2, учень Ваня Петров – a3 і a4, і т. Д.
2. Дати команду «Складай!» – Кожен складає свої числа.
3. Дати команду «Записуй!» – Кожен записує крейдою на класній дошці свій результат.
4. Оскільки у нас залишилося ще 50 необроблених чисел (a51… A100) »повторити пункти 1-3. Після цього маємо на дошці 50 чисел: b1 = a1 + a1,. . . b50 = a99 + a100 – результати парних складань.
5. Об’єднати в пари числа b1 і повторити пункти 2-4, поки не залишиться одне число.
Перше враження – дуже складно, набагато складніше, ніж на рис. 4.14. Якби ми захотіли записати цей алгоритм у вигляді блок-схе-ми, то нам би довелося, крім опису порядку дій і об’єктів дій, зробити те, чого ми ніколи при запису алгоритмів ще не робили, – передбачити синхронізацію паралельних процесів за часом. Наприклад, виконання команд 2 і 3 має завершитися усіма учасниками обчислень до нового об’єднання чисел в пари (переходу до пункту 4), інакше навіть при вирішенні цієї простої задачі настане хаос.
Але складність не їсти об’єктивна причина відкинути такий шлях, особливо якщо мова йде про можливість значного прискорення комп’ютерних обчислень. Те, що ми запропонували вище, називається мовою програмістів розпаралелюванням обчислень і цілком піддається формальному опису. Ефект прискорення обчислень очевидний: пункт 2 у наведеному вище алгоритмі прискорює відповідний етап роботи в 25 разів!
Наступне питання: що треба змінити в пристрої комп’ютера, щоб він зміг так працювати? Для реалізації подібної схеми обчислень комп’ютера потрібно 25 процесорів, об’єднаних в одну архітектуру і здатних працювати паралельно. Такі багатопроцесорні обчислювальні комплекси – реальність сьогоднішньої обчислювальної техніки.
Повернемося, однак, до описаної вище послідовності дій – в ній ще є джерела проблем. Уявімо собі, що в схемі на рис. 4.1 ми домалювали ще 24 центральних процесора, з’єднаних з шиною. При реалізації в такому комп’ютері команди 3 з нашого прикладу станеться одночасне звернення 25 процесорів до системної шини для пересилання результатів складання в оперативну пам’ять. Але оскільки шина одна, то і числа можуть пересилатися в пам’ять тільки по одному. Значить, для виконання команди 3 доведеться організувати чергу на передачу чисел в пам’ять. Тут же виникає питання: чи не зведе до нуля ця черга всі переваги від паралельності виконання операцій на кроці 2? А якщо переваги залишаться, то наскільки вони будуть великі? Чи окупляться витрати на 24 додаткових процесора?
У виниклій ситуації природний наступний крок: введення в архітектуру декількох системних шин. А якщо ще подумати над можливими проблемами, то й кількох пристроїв оперативної пам’яті.
Як бачите, все це дуже непросто. Обговорювані зміни в устрої комп’ютера призводять до принципово нових архитектурам, відмінним від архітектури фон Неймана. Винахідникам таких систем доводиться шукати компроміс між зростаючою складністю (і, як наслідок, – вартістю) і прискоренням їх роботи.
Варіанти реалізації паралельних обчислювальних систем
У самому загальному сенсі під паралельними обчисленнями розуміються процеси обробки даних, в яких одночасно можуть виконуватися кілька машинних операцій.
Розподілені обчислення – спосіб реалізації паралельних обчислень шляхом використання безлічі комп’ютерів, об’єднаних в мережу. Такі обчислювальні системи ще називають мультікомпьютер-ними системами.
Розподілені обчислення часто реалізуються за допомогою комп’ютерних кластерів – декількох комп’ютерів, зв’язаних в локальну мережу і об’єднаних спеціальним програмним забезпеченням, що реалізує паралельний обчислювальний процес. Розподілені обчислення можуть проводитися і за допомогою багатомашинних обчислювальних комплексів, утворених об’єднанням декількох окремих комп’ютерів через глобальні мережі.
Мультипроцессорная система реалізується в одному комп’ютері. Досягнення паралелізму в ній відбувається завдяки можливості незалежної роботи окремих пристроїв: декількох процесорів, блоків оперативної пам’яті, шин і т. Д. Мультипроцессорная система може використовувати різні способи доступу до загальної для всієї системи пам’яті. Всі процесори можуть мати рівний (однорідний) доступ до єдиної пам’яті. До такого типу відносяться найпотужніші у світі суперкомп’ютери сімейства Cray. Інше рішення: для кожного процесора виділяється свій розділ пам’яті комп’ютера.
На сьогоднішній день кластерні системи – це найдешевший спосіб організації паралельних обчислень, оскільки для них можна використовувати вже наявні у користувача комп’ютери. Проте можливості реалізації взаємодії окремих комп’ютерів в порівнянні з організацією вузлів в мультіпроцесорній системі невеликі, так само як і швидкість передачі даних, і це накладає обмеження на клас вирішуваних завдань.

Посилання на основну публікацію