2.5.1 Чередуемих пам'ять
Чередуемих пам'ять поділяється на банки пам'яті. Прийнято угоду про те, що комірка пам'яті з номером i знаходиться в банку пам'яті з номером i mod n, де n - кількість банків пам'яті. Таким чином, якщо є 8 банків пам'яті, то перший банку пам'яті будуть належати комірки пам'яті з номерами 0, 8, 16,:, другий - 1, 9, 17, ... і т.д. Запити до різних банків пам'яті можуть оброблятися одночасно. при достатньому
кількості банків пам'яті швидкість обміну даними між пам'яттю і процесором може бути близька до ідеального значення - одне машинне слово за один такт роботи процесора.
Комірки пам'яті можуть бути пронумеровані і безперервним чином, тобто, скажімо, в першому банку знаходяться осередки з номерами від 0 до 255, у другому від 256 до 511 і т.д. У векторних комп'ютерах зазвичай використовується перший спосіб адресації, а в багатопроцесорних комплексах з пам'яттю, що - другий.
2.5.2 Колективна пам'ять
Найпростіший спосіб створити багатопроцесорний обчислювальний комплекс з пам'яттю, що - взяти кілька процесорів, з'єднати їх із загальною шиною і з'єднати цю шину з оперативною пам'яттю. Цей простий спосіб є не дуже вдалим, оскільки між
процесорами виникає боротьба за доступ до шини і якщо один процесор приймає команду або передає дані, всі інші процесори змушені будуть перейти в режим очікування. Це призводить до того, що, починаючи з деякого числа процесорів, швидкодія такої системи перестане збільшуватися при додаванні нового процесора.
Дещо поліпшити картину може застосування кеш-пам'яті для зберігання команд. При наявності локальної, тобто належить даному процесору кеш-пам'яті, наступна необхідна йому команда з великою ймовірністю буде перебувати в кеш-пам'яті. В
Внаслідок цього зменшується кількість звернень до шини і швидкодію системи зростає. Разом з тим виникає нова проблема - проблема кеш-когерентності. Ця проблема полягає в тому, що якщо, скажімо, двом процесорам для виконання різних операцій знадобилося значення V, це значення буде зберігатися у вигляді двох копій в кешпамяті обох процесорів. Один з процесорів може змінити це значення в результаті виконання своєї команди, і воно буде передано в оперативну пам'ять комп'ютера. Але в кешпамяті другого процесора все ще зберігається старе значення! Отже, необхідно забезпечити своєчасне оновлення даних в кеш-пам'яті всіх процесорів комп'ютера.
Є й інші реалізації розділяється пам'яті. Це, наприклад, Колективна пам'ять з дискретними модулями пам'яті. Фізична пам'ять складається з декількох модулів, хоча віртуальний адресний простір залишається спільним. Замість загальної шини в цьому випадку використовується перемикач, направляючий запити від процесора до пам'яті. Такий перемикач може одночасно обробляти декілька запитів до пам'яті, тому якщо всі процесори звертаються до різних модулів пам'яті, швидкодія зростає.
2.5.3 Розподілена пам'ять
В обчислювальних системах з розподіленою пам'яттю оперативна пам'ять є у кожного процесора. Процесор має доступ тільки до своєї пам'яті. У цьому випадку відпадає необхідність у шині або перемикачі. Немає і конфліктів з доступу до пам'яті, так як кожен процесор працює тільки зі своєю власною пам'яттю. Ні властивих системам з пам'яттю, що обмежень на число процесорів, ні, зрозуміло, і проблеми з кешкогерентностью. Але, з іншого боку, виникають проблеми з організацією обміну даними між процесорами. Зазвичай такий обмін здійснюється за допомогою обміну повідомленнями-посилками, що містять дані. Для формування такої посилки потрібен час, для отримання та зчитування отриманих даних теж потрібен певний час. Ці додаткові витрати часу - плата за всі ті переваги, про які йшла мова.
Програмування для систем з розподіленою пам'яттю - більш складне завдання. Воно вимагає розбиття вихідної обчислювальної задачі на підзадачі, виконання яких може бути рознесено на різні процесори.
Одним з найбільш відомих комп'ютерів такого типу є обчислювальна система CM-5 фірми Thinking Machines. Вона складається з процесорних елементів, побудованих на основі мікропроцесора SPARC і з'єднаних мережею зі спеціальною топологією типу "дерево". У кожного процесорного елемента є локальна пам'ять об'ємом 32 мегабайти. Пропускна здатність шини більше біля кореня дерева і менше у її гілок.
Найважливішим елементом архітектури будь-якого комп'ютера, а високопродуктивних обчислювальних систем в особливості, є кошти обміну даними між процесором і оперативною пам'яттю, процесором та іншим процесором, процесором та іншими пристроями і т.д. Організація внутрішніх комунікацій обчислювальної системи називається її топологією. Далі мова йде про багатопроцесорних комп'ютерах, які в даному контексті прийнято розглядати як набір вузлів (процесорних елементів, модулів пам'яті, перемикачів) і з'єднань між вузлами.
Наведемо кілька визначень. Два вузли називаються сусідніми, якщо між ними є пряме з'єднання. Порядком вузла називається кількість його сусідів. Діаметром мережі (а мова йде, фактично, про локальних мережах) називається максимальний шлях між будь-якими двома вузлами. Масштабованість характеризує зростання складності з'єднань при додаванні в конфігурацію нових вузлів. Якщо система має високий ступінь масштабованості, її складність буде трохи змінюватися при нарощуванні системи, незмінним буде і діаметр мережі.
Наведемо приклади топологій, які застосовуються в паралельних обчислювальних системах. Поширеною є добре масштабована топологія "гіперкуб":
2-ох вимірний 3-ьох вимірний
Для адресації вузлів в гіперкубі кожному вузлу привласнюється свій ідентифікаційний номер, при цьому двійкові подання ідентифікаційних номерів сусідніх вузлів відрізняються одним бітом. Алгоритм пересилання повідомлення від одного вузла до іншого в цьому
випадку досить простий і заснований на побітового порівнянні довічних уявлень ідентифікаційних номерів поточного вузла і адресата.
Іншим прикладом топології є двовимірна решітка. Це звичайна квадратна решітка з граничними сполуками різного роду:
плоска решітка
Кількість перемикачів,
виходами O (n log2n).
З'єднання "метелик"
Більш складний тип комунікації дається багатоступінчатими сполуками. У цьому випадку на одному кінці з'єднання знаходяться процесори, а на іншому процесори або інші вузли. У середині розташовуються перемикачі. при передачі
даних від вузла до вузла перемикачі встановлюються таким чином, щоб забезпечити необхідну з'єднання. Очевидно, для цього потрібен якийсь час - "час установки".
Прикладами багатоступеневих сполук є сполуки "метелик" і "омега". Ці сполуки формуються з перемикачів, що мають 2 входи і 2 виходи. Входи і виходи коммутируются.
необхідне для нормальної роботи мережі з n входами і n
перехресне з'єднання
Більш стійку й ефективну роботу забезпечує перехресне з'єднання. Перемикачі динамічно конфигурируются так, щоб забезпечити необхідну з'єднання. Масштабованість такого з'єднання не дуже гарна, так як додавання нового вузла вимагає включення додатково 2n-1 перемикачів.
Найважливішими атрибутами системи комунікацій є стратегії управління, перемикання і синхронізації. Що стосується управління, то тут можна виділити дві альтернативи: централізоване управління єдиним контролером (модулем управління) і розподілене управління. Прикладами розподіленого управління є робота багатоступеневих сполук, де кожен вузол приймає рішення, як вчинити з надійшли повідомленням - залишити його собі або передати сусідові. Інший варіант використовується, наприклад, у з'єднаннях типу "зірка", де кожне повідомлення пересилається в контролер, який визначає його подальшу долю.
Синхронізація теж може бути глобальною, коли Сінхронізуется послідовність імпульсів передається всім вузлам обчислювальної системи, але може бути і локальною, коли кожен вузол має свій власний генератор. Останній варіант називається асинхронної роботою. Перевага глобальної синхронізації, характерною для SIMD машин полягає в більш простий апаратної й програмної реалізації, а асинхронні системи, найчастіше це MIMD-комп'ютери - більш гнучкі.
Стратегії перемикання теж бувають двох видів. По-перше, це пакетне перемикання, коли повідомлення розбивається на більш дрібні пакети, пересилаються по мережі. Подолавши чергове з'єднання, пакет потрапляє на черговий вузол, який визначає, куди цей пакет повинен бути відправлений і чи повинен він бути відправлений взагалі. Зрештою пакети повинні прибути на вузол-адресат, причому шляхи їх можуть бути різними. На останньому вузлі пакети збираються і відновлюється передане повідомлення. По-друге, можливо ланцюгове перемикання, коли між відправником і адресатом створюється магістраль, по якій і передається повідомлення цілком.
