Назад в библиотеку

Архітектура багатопроцесорних обчислювальних систем

Автор: А.Л. Головинський 

В процесі розвитку суперкомп'ютерних технологій ідею підвищення продуктивності обчислювальної системи за рахунок збільшення кількості процесорів використовували неодноразово. Якщо не вдаватися до історичного екскурсу і обговорення всіх таких спроб, то можна коротко описати розвиток подій.

Експериментальні розробки зі створення багатопроцесорних обчислювальних систем почалися в 70-х роках 20 століття. Однією з перших таких систем стала розроблена в університеті Ілінойса МОС ILLIAC IV, яка включала 64 (у проекті до 256) процесорних елементів (ПЕ), що працюють за єдиною програмою, яка застосовується до вмісту власної оперативної пам'яті кожного ПЕ.

Обмін даними між процесорами здійснювався через спеціальну матрицю комунікаційних каналів. Вказана особливість комунікаційної системи дала назву ''Матричні суперкомп'ютери'' відповідному класу МОС.

Відзначимо, що ширший клас МОС з розподіленою пам'яттю і з довільною комунікаційною системою отримав надалі назву “Багатопроцесорні системи з масовим паралелізмом”, або МОС з MPP-архітектурою (MPP – Massively Parallel Processing). При цьому, як правило, кожен з ПЕ MPP системи є універсальним процесором, що діє за своєю власною програмою (на відміну від спільної програми для всіх ПЕ матричної МВС).

Перші матричні МОС випускалися буквально поштучно, тому їх вартість була фантастично високою. Серійні ж зразки подібних систем, такі як ICL DAP, що включали до 8192 ПЕ, з'явилися значно пізніше, проте не набули широкого поширення, зважаючи на складність програмування МОС з одним потоком управління (з однією програмою, спільною для всіх ПЕ).

Перші промислові зразки мультипроцесорних систем з'явилися на базі векторно-конвеєрних комп'ютерів в середині 80-х років.

Найбільш поширеними МОС такого типу були суперкомп'ютери фірми Cray. Проте такі системи були надзвичайно дорогими і вироблялися невеликими серіями. Як правило, в подібних комп'ютерах об'єднувалося від 2 до 16 процесорів, які мали рівноправний (симетричний) доступ до спільної оперативної пам'яті. У зв'язку з цим вони отримали назву симетричні мультипроцесорні системи (Symmetric Multi-Processing – SMP).

Як альтернатива таким дорогим мультипроцесорним системам на базі векторно-конвеєрних процесорів була запропонована ідея будувати еквівалентні за потужністю багатопроцесорні системи з великої кількості дешевих мікропроцесорів, що серійно випускалися.

Проте дуже скоро виявилося, що SMP архітектура має досить обмежені можливості з нарощування кількості процесорів в системі через різке збільшення числа конфліктів при зверненні до спільної шини пам'яті.  

У зв'язку з цим виправданою представлялася ідея забезпечити кожен процесор власною оперативною пам'яттю, перетворюючи комп'ютер на об'єднання незалежних обчислювальних вузлів.  

Такий підхід значно збільшив міру масштабованості багатопроцесорних систем, але у свою чергу почав вимагати розробки спеціального способу обміну даними між обчислювальними вузлами, що реалізовується зазвичай у вигляді механізму передачі повідомлень (Message Passing).

Комп'ютери з такою архітектурою є найбільш яскравими представниками MPP систем. В даний час ці два напрямки (або якісь їх комбінації) є домінуючими в розвитку суперкомп'ютерних технологій. 

Щось середнє між SMPі MPP представляють NUMA-архітектури (Non Uniform Memory Access), в яких пам'ять фізично розділена, але логічно загальнодоступна. При цьому час доступу до різних блоків пам'яті стає неоднаковим. В одній з перших систем цього типу Cray T3D час доступу до пам'яті іншого процесора був в 6 разів більше, ніж до своєї власної.

На даний час розвиток суперкомп'ютерних технологій йде чотирма основними напрямками:

Розглянемо основні особливості перерахованих архітектур.

Векторно-конвеєрні суперкомп'ютери

Перший векторно-конвеєрний комп'ютер Cray-1 з'явився в 1976 році. Архітектура його виявилася настільки вдалою, що він поклав початок цілому сімейству комп'ютерів.

Назву цьому сімейству комп'ютерів дали два принципи, закладені в архітектурі процесорів:

Довжина векторів, що обробляються одночасно, в сучасних векторних комп'ютерах складає, як правило, 128 або 256 елементів. Очевидно, що векторні процесори повинні мати набагато складнішу структуру і по суті справи містити безліч арифметичних пристроїв.

Основне призначення векторних операцій полягає в розпаралелюванні виконання операторів циклу, в яких в основному і зосереджена велика частина обчислювальної роботи. Для цього цикли піддаються процедурі векторизації з тим, щоб вони могли реалізовуватися з використанням векторних команд.

Як правило, це виконується автоматично компіляторами під час виготовлення ними виконливого коду програми. Тому векторно-конвеєрні комп'ютери не вимагали якоїсь спеціальної технології програмування, що і виявилось вирішальним чинником їх успіху на комп'ютерному ринку. Проте, було потрібне дотримання деяких правил при написанні циклів з тим, щоб компілятор міг їх ефективно векторизувати.

Історично це були перші комп'ютери, до яких повною мірою можна було застосувати поняття суперкомп'ютер. Як правило, декілька векторно-конвеєрних процесорів (2-16) працюють в режимі зі спільною пам'яттю (SMP), утворюючи обчислювальний вузол, а декілька таких вузлів об'єднуються за допомогою комутаторів, утворюючи або NUMA, або MPP систему.

Типовими представниками такої архітектури є комп'ютери CRAY J90/t90, CRAY Sv1, NEC Sx-4/sx-5.

Рівень розвитку мікроелектронних технологій не дозволяє в даний час виробляти однокристальні векторні процесори, тому ці системи досить громіздкі і надзвичайно дорогі.

У зв'язку з цим, починаючи з середини 90-х років, коли з'явилися досить потужні суперскалярні мікропроцесори, інтерес до цього напрямку був в значній мірі ослаблений.  Суперкомп'ютери з векторно-конвеєрною архітектурою стали програвати системам з масовим паралелізмом.

Проте в березні 2002 р. корпорація NEC представила систему Earth Simulator з 5120 векторно-конвеєрними процесорами, яка в 5 разів перевищила продуктивність попереднього володаря рекорду – MPP системи ASCI White з 8192 суперскалярними мікропроцесорами. Це, звичайно ж, змусило багатьох по-новому поглянути на перспективи векторно-конвеєрних систем.

Симетричні мультипроцесорні системи (SMP)

Характерною рисою багатопроцесорних систем SMP архітектури є те, що всі процесори мають прямий і рівноправний доступ до будь-якої точки спільної пам'яті. 

Перші системи SMP складалися з декількох однорідних процесорів і масиву спільної пам'яті, до якої процесори підключалися через спільну системну шину. Проте дуже скоро виявилося, що така архітектура непридатна для створення масштабних систем.

Перша проблема, що виникла, – велика кількість конфліктів при зверненні до спільної шини. Гостроту цієї проблеми вдалося частково зняти розділенням пам'яті на блоки, підключення до яких за допомогою комутаторів дозволило розпаралелювати звернення від різних процесорів. Проте і в такому підході неприйнятно великими здавалися накладні витрати для систем більш ніж з 32-ма процесорами.

Сучасні системи SMP архітектури складаються, як правило, з декількох однорідних мікропроцесорів, що серійно випускаються, і масиву спільної пам'яті, підключення до якої виконується або за допомогою спільної шини, або за допомогою комутатора.

Наявність спільної пам'яті значно спрощує організацію взаємодії процесорів між собою і програмування, оскільки паралельна програма працює в єдиному адресному просторі.

Проте за цією простотою ховаються великі проблеми, притаманні системам цього типу. Всі вони так чи інакше пов'язані з оперативною пам'яттю. Річ у тому, що зараз навіть в однопроцесорних системах найвужчим місцем є оперативна пам'ять, швидкість роботи якої значно відстала від швидкості роботи процесора.

Для того, щоб згладити цей розрив, сучасні процесори забезпечуються швидкісною буферною пам'яттю (кеш-пам'яттю), швидкість роботи якої значно вища, ніж швидкість роботи основної пам'яті.

Очевидно, що при проектуванні багатопроцесорних систем ці проблеми ще більше загострюються. Окрім добре відомої проблеми конфліктів при зверненні до спільної шини пам'яті виникла і нова проблема, пов'язана з ієрархічною структурою організації пам'яті сучасних комп'ютерів.

У багатопроцесорних системах, побудованих на базі мікропроцесорів із вбудованою кеш-пам'яттю, порушується принцип рівноправного доступу до будь-якої точки пам'яті. Дані, що знаходяться в кеш-пам'яті деякого процесора, недоступні для інших процесорів. Це означає, що після кожної модифікації копії деякої змінної, що знаходиться в кеш-пам'яті якого-небудь процесора, необхідно виконувати синхронну модифікацію цієї змінної, розташованої в основній пам'яті.

З більшим або меншим успіхом ці проблеми вирішуються в рамках загальноприйнятої в даний час архітектури ccNUMA (cache coherent Non Uniform Memory Access). В цій архітектурі пам'ять фізично розподілена, але логічно загальнодоступна.

Це, з одного боку, дозволяє працювати з єдиним адресним простором, а, з іншого, збільшує масштабованість систем.  Когерентність кеш-пам'яті підтримується на апаратному рівні, що, проте, не звільняє від накладних витрат на її підтримку.

На відміну від класичних систем SMP пам'ять стає трирівневою:

Час звернення до різних рівнів може відрізнятися на порядок, що сильно ускладнює написання ефективних програм для таких систем. Перераховані обставини значно обмежують можливості з нарощування продуктивності ccNUMA систем шляхом простого збільшення кількості процесорів.

Неприємною властивістю SMP систем є те, що їх вартість зростає швидше, ніж продуктивність при збільшенні кількості процесорів в системі. Крім того, через затримки під час звернення до загальної пам'яті неминуче взаємне гальмування при паралельному виконанні навіть незалежних програм.

Системи з масовим паралелізмом (МРР)

Проблеми, притаманні багатопроцесорним системам зі спільною пам'яттю, простим і природним чином усуваються в системах з масовим паралелізмом. Комп'ютери цього типу є багатопроцесорними системами з розподіленою пам'яттю, в яких за допомогою деякого комунікаційного середовища об'єднуються однорідні обчислювальні вузли.

Кожен з вузлів складається з одного або декількох процесорів, власної оперативної пам'яті, комунікаційного обладнання, підсистеми введення/виведення, тобто має все необхідне для незалежного функціонування.

При цьому на кожному вузлі може функціонувати або повноцінна операційна система (як в системі RS/6000 SP2), або урізаний варіант, що підтримує лише базові функції ядра, а повноцінна ОС працює на спеціальному керівному комп'ютері (як в системах Cray T3E, nCUBE2).

Процесори в таких системах мають прямий доступ лише до своєї локальної пам'яті. Доступ до пам'яті інших вузлів реалізується зазвичай за допомогою механізму передачі повідомлень. Така архітектура обчислювальної системи усуває одночасно як проблему конфліктів при зверненні до пам'яті, так і проблему когерентності кеш-пам'яті.

Це дає можливість практично необмеженого нарощування кількості процесорів в системі, збільшуючи тим самим її продуктивність. Успішно функціонують MPP з сотням і тисячами процесорів (ASCI White – 8192, Blue Mountain – 6144).

Важливою властивістю MPP систем є їх висока міра масштабованості. Залежно від обчислювальних потреб для досягнення необхідної продуктивності потрібно просто зібрати систему з потрібною кількістю вузлів.

На практиці все, звичайно, набагато складніше. Усунення одних проблем, як це зазвичай буває, породжує інші. Для MPP систем на перший план виходить проблема ефективності комунікаційного середовища.

Різні виробники MPP систем використовували різні топології. У комп'ютерах Intel Paragon процесори утворювали прямокутну двовимірну сітку. Для цього в кожному вузлі досить чотирьох комунікаційних каналів.

У комп'ютерах Cray T3D/T3E використовувалася топологія тривимірного тора. Відповідно, у вузлах цього комп'ютера було шість комунікаційних каналів. Фірма nCUBE використовувала в своїх комп'ютерах топологію n-вимірного гіперкуба.

Кожна з розглянутих топологій має свої переваги і недоліки.

Відмітимо, що при обміні даними між процесорами, які не є найближчими сусідами, відбувається трансляція даних через проміжні вузли. Очевидно, що у вузлах мають бути передбачені якісь апаратні засоби, які звільняли б центральний процесор від участі в трансляції даних.

Останнім часом для з'єднання обчислювальних вузлів частіше використовується ієрархічна система високошвидкісних комутаторів, як це вперше було реалізовано в комп'ютерах IBM SP2. Така топологія дає можливість прямого обміну даними між будь-якими вузлами, без участі в цьому проміжних вузлів.

Системи з розподіленою пам'яттю ідеально підходять для пареллельного виконання незалежних програм, оскільки при цьому кожна програма виконується на своєму вузлі і жодним чином не впливає на виконання інших програм. Проте при розробці паралельних програм доводиться враховувати складнішу, ніж в SMP системах, організацію пам'яті.

Оперативна пам'ять в MPP системах має 3-х рівневу структуру:

При цьому відсутня можливість прямого доступу до даних, розташованих в інших вузлах. Для їх використання ці дані мають бути заздалегідь передані в той вузол, який в даний момент їх потребує. Це значно ускладнює програмування.

Крім того, обмін даними між вузлами виконується значно повільніше, ніж обробка даних в локальній оперативній пам'яті вузлів. Тому написання ефективних паралельних програм для таких комп'ютерів є складнішим завданням, ніж для SMP систем.

Кластерні системи

Кластерні технології стали логічним продовженням розвитку ідей, закладених в архітектурі MPP систем.

Якщо процесорний модуль в MPP системі є закінченою обчислювальною системою, то наступний крок напрошується сам собою: чому б в якості обчислювальних вузлів не використовувати звичайні комп'ютери, що серійно випускаються. 

Розвиток комунікаційних технологій, а саме, поява високошвидкісного мережевого обладнання і спеціального програмного забезпечення, такого як система MPI, що реалізовує механізм передачі повідомлень над стандартними мережевими протоколами, зробили кластерні технології загальнодоступними. 

Сьогодні не складає великих труднощів створити невелику кластерну систему, об'єднавши обчислювальні потужності комп'ютерів окремої лабораторії або учбового класу. Привабливою рисою кластерних технологій є те, що вони дозволяють для досягнення необхідної продуктивності об'єднувати в єдині обчислювальні системи комп'ютери різного типу, починаючи від персональних комп'ютерів і закінчуючи потужними суперкомп'ютерами.

Широкого поширення кластерні технології набули як засіб створення систем суперкомп'ютерного класу із складових частин масового виробництва, що значно знижує вартість обчислювальної системи. 

Зокрема, одним з перших був реалізований проект COCOA, в якому на базі 25 двопроцесорних персональних комп'ютерів загальною вартістю порядку $100000 була створена система з продуктивністю, еквівалентною 48-процесорному Cray T3d вартістю декілька мільйонів доларів США.

Звичайно, про повну еквівалентність цих систем говорити не доводиться. Як вказувалося в попередньому розділі, продуктивність системи з розподіленою пам'яттю дуже сильно залежить від продуктивності комунікаційного середовища.

Комунікаційне середовище можна досить повно охарактеризувати двома параметрами: латентністю – час затримки при відсиланні повідомлення та пропускною здатністю – швидкість передачі інформації. Так ось для комп'ютера Cray T3D ці параметри складають відповідно 1 мкс і 480 мб/с, а для кластера, у якому в якості комунікаційного середовища використана мережа Fast Ethernet, 100 мкс і 10 мб/с.

Це частково пояснює дуже високу вартість суперкомп'ютера. При таких параметрах, як в розглянутого кластера, знайдуться не так багато задач, які можна ефективно вирішувати на досить великій кількості процесорів.

Якщо говорити коротко, то кластер – це зв'язаний набір повноцінних комп'ютерів, що використовується як єдиний обчислювальний ресурс. Переваги кластерної системи перед набором незалежних комп'ютерів очевидні.

По-перше, розроблено безліч диспетчерських систем пакетної обробки завдань, що дозволяють відправити завдання на обробку кластеру вцілому, а не якомусь окремому комп'ютеру. Ці диспетчерські системи автоматично розподіляють завдання за вільними обчислювальними вузлами або буферизують їх за відсутності таких, що дозволяє забезпечити більш рівномірне і ефективне завантаження комп'ютерів.

По-друге, з'являється можливість спільного використання обчислювальних ресурсів декількох комп'ютерів для вирішення одного завдання. Для створення кластерів зазвичай використовуються або прості однопроцесорні персональні комп'ютери, або двох- чи чотирипроцесорні SMP-сервери.

При цьому не накладається жодних обмежень на склад і архітектуру вузлів. Кожен з вузлів може функціонувати під управлінням своєї власної операційної системи. Найчастіше використовуються стандартні ОС: Linux, FreeBSD, Solaris, Tru64 Unix, Windows.

У тих випадках, коли вузли кластера неоднорідні, то говорять про гетерогенні кластери.
При створенні кластеру можна виділити два підходи. Перший підхід застосовується при створенні невеликої кластерної системи. У кластер об'єднуються повнофункціональні комп'ютери, які продовжують працювати і як самостійна одиниця, наприклад, комп'ютери учбового класу або робочі станції лабораторії.

Другий підхід застосовується в тих випадках, коли цілеспрямовано створюється потужний обчислювальний ресурс. Тоді системні блоки комп'ютерів компактно розміщуються в спеціальний стійках, а для управління системою і для запуску задач виділяється один або декілька повнофункціональних комп'ютерів, так званих хост-комп’ютерів.

У цьому випадку немає необхідності забезпечувати комп'ютери обчислювальних вузлів графічними картами, моніторами, дисковими накопичувачами та іншим периферійним обладнанням, що значно знижує вартість системи.