3. Комп’ютери з numa-архітектурою
Чому простіше писати паралельні програми для комп'ютерів із загальною пам'яттю? Тому що є єдиний адресний простір і користувачу не потрібно займатися організацією пересилок повідомлень між процесами для обміну даними. Якщо створити механізм, який всю сукупну фізичну пам'ять комп'ютера дозволяв би програмам користувачів розглядати як єдину пам'ять, що адресується, все стало б набагато простішим.
По такому шляху і пішли розробники системи Cm*, що створили ще в кінці 70-х років минулого століття перший NUMA-комп'ютер.
NUMA-комп'ютер - комп'ютер з неоднорідним доступом до пам'яті. У цьому значенні іноді говорять, що класичні SMP-комп'ютери володіють архітектуроюUMA (Uniform Memory Access), забезпечуючи однаковий доступ будь-якого процесора до будь-якого модуля пам'яті.
3.1. Системи Cm*
Даний комп'ютер складається з набору кластерів, сполучених один з одним через міжкластерну шину. Кожен кластер об'єднує процесор, контролер пам'яті, модуль пам'яті і, деякі пристрої введення/виводу, сполучені між собою за допомогою локальної шини (мал. 3.1). Коли процесору потрібно виконати операції читання або запису, він посилає запит з потрібною адресою своєму контролеру пам'яті. Контролер аналізує старші розряди адреси, по яких і визначає, в якому модулі зберігаються потрібні дані. Якщо адреса локальна, то запит виставляється на локальну шину, інакше запит для видаленого кластера відправляється через міжкластерну шину. У такому режимі програма, що зберігається в одному модулі пам'яті, може виконуватися будь-яким процесором системи. Єдина відмінність полягає в швидкості виконання. Всі локальні посилання відпрацьовуються набагато швидше, ніж віддалені. Тому і процесор того кластера, де зберігається програма, виконає її на порядок швидше, ніж будь-який інший.
Рис. 3.1. Схема обчислювальної системи Cm*
3.2. Комп'ютер bbn Butterfly
Іншим прикладом NUMA-комп'ютера був комп'ютер BBN Butterfly, який в максимальній конфігурації об'єднував 256 процесорів (мал.3.2). Кожен обчислювальний вузол комп'ютера містить процесор, локальну пам'ять і контролер пам'яті, який визначає, чи є запит до пам'яті локальним або його необхідно передати видаленому вузлу через комутатор Butterfly. З погляду програміста пам'ять є єдиною загальною пам'яттю, видалені посилання в якій реалізуються небагато довше локальних (приблизно 6 мкс для відалених проти 2 мкс для локальних).
По шляху побудови великих NUMA-комп'ютерів можна було б сміливо йти вперед, якби не одна несподівана проблема — кеш-пам'ять окремих процесорів. Кеш-пам'ять, яка допомагає значно прискорити роботу окремих процесорів, для багатопроцесорних систем виявляється вузьким місцем. У процесорах перших NUMA-комп'ютерів кеш-пам'яті не було, тому не було і такої проблеми. Але для сучасних мікропроцесорів кеш є невід'ємною складовою частиною. Причину нашого занепокоєння дуже легко пояснити. Припустимо, що процесор Р1 зберіг значення х в комірці q, а потім процесор Р2 хоче прочитати вміст того ж осередкуq. Що одержить процесор Р2? Звичайно ж, всім би хотілося, щоб він набув значення х, але як він його одержить, якщо х потрапило в кеш процесора Р1? Ця проблема носить назву проблеми узгодження вмісту кеш-пам'яті (cache coherence problem, проблема когерентності кешів). Вказана проблема актуальна і для сучасних SMP-комп'ютерів, кеш процесорів яких також може викликати неузгодженість у використовуванні даних.
Рис. 3.2. Схема обчислювальної системи BBN Butterfly
Важливе питання, наскільки "неоднорідна" архітектура NUMA? Якщо звернення до пам'яті іншого вузла вимагає на 5—10% більше часу, ніж звернення до своєї пам'яті, то це може і не викликати ніяких питань. Більшість користувачів відноситиметься до такої системи, як до UMA (SMP), і практично всі розроблені дляSMP програми працюватимуть достатньо добре. Проте для сучасних NUMA систем це не так, і різниця часу локального і віддаленого доступу лежить в проміжку 200—700%. При такій різниці в швидкості доступу для забезпечення належної ефективності необхідно потурбуватися про розташування даних.
