Типи мультипроцесорних систем системи паралельної обробки даних
Основна пам'ять
підсистема
введення-виведення
Мал. 4.14. Типова архітектура мультипроцесорної системи із загальною пам'яттю
ках подібного типу машин вдавалося розмістити весь процесор і кеш-пам'ять на одній платі, яка потім вставлялася в задню панель, і за допомогою останньої реалізовувалася шинна архітектура. Сучасні конструкції дозволяють розмістити до чотирьох процесорів на одній платі (рис. 4.14).
У такій машині кеш-пам'ять може містити як колективні, так і приватні дані. Приватні дані - це дані, які використовуються одним процесором, в той час як колективні дані використовуються багатьма процесорами, по суті забезпечуючи обмін між ними. Коли кешируєтся елемент приватних даних, їх значення переноситься в кеш-пам'ять для скорочення середнього часу доступу, а також для зменшення необхідної смуги пропускання. Оскільки жоден інший процесор не використовує приватні дані, цей процес ідентичний процесу для однопроцессорной машини з кеш-пам'яттю. Якщо кешуються колективні дані, то їх поділяє значення реплицируется (від лат. Replicare - звертати назад, відображати) і може міститися не в одній кеш-пам'яті, а в декількох. Крім скорочення затримки доступу і зменшення необхідної смуги пропускання така реплікація даних сприяє також загальне скорочення кількості обмінів. Однак кешування поділюваних даних створює нову проблему - когерентність (від лат. Cohaerentia - зчеплення, зв'язок) кеш-пам'яті.
Мультипроцессорная когерентність кеш-пам'яті виникає через те, що значення елемента даних в пам'яті, що зберігається в двох різних процесорах, є цим процесорам тільки через їх індивідуальні кеш-модулі.
Проблема когерентності пам'яті для мультипроцессоров і пристроїв введення-виведення має багато аспектів. Зазвичай в малих мультипроцесорах використовується апаратний механізм - протокол, що дозволяє вирішити дану проблему. Ці протоколи називаються протоколами когерентності кеш-пам'яті. Існують два класи таких протоколів:
протоколи на основі довідника (directory based). У цьому випадку інформація про стан блоку фізичної пам'яті міститься тільки в одному місці - довіднику (фізично довідник може бути розподілений по вузлах системи);
протоколи спостереження (snooping). При цьому кожен кеш-модуль, який містить копію даних деякого блоку фізичної пам'яті, має також відповідну копію службової інформації про його стан. Централізована система записів відсутня. Зазвичай кеш-модулі розташовуються на загальною (що розділяється) шині, і контролери всіх кеш-модулів спостерігають за шиною (переглядають її) для визначення того, чи не містять вони копію відповідного блоку.
У мультипроцесорних системах, що використовують мікропроцесори з кеш-пам'яттю, під'єднані до централізованої загальної пам'яті, протоколи спостереження набули популярності, оскільки для опитування стану кешів вони можуть використовувати існуюче фізичне з'єднання - шину пам'яті.
Неформально проблема когерентності кеш-пам'яті складається в необхідності гарантувати, що будь-який зчитування елемента даних повертає останнім за часом записане в нього значення. Гарантувати когерентність кеш-пам'яті можна в разі забезпечення двох умов:
операція читання комірки пам'яті одним процесором, яка слідує за операцією запису в ту ж комірку пам'яті іншим процесором, отримає записане значення, якщо операції читання і запису досить відокремлені один від одного за часом;
операції записи в одну і ту ж комірку пам'яті виконуються строго послідовно: це означає, що дві поспіль йдуть
операції записи в одну і ту ж комірку пам'яті спостерігатимуться іншими процесорами саме в тому порядку, в якому вони з'являються в програмі процесора, що виконує ці операції записи.
• Перша умова, очевидно, пов'язано з визначенням когерентного (погодженого) стану пам'яті: якби процесор завжди зчитував тільки старе значення даних, ми сказали б, що пам'ять некогерентного.
Необхідність строго послідовно виконувати операції запису також є дуже важливою умовою. Уявімо собі, що строго послідовне виконання операцій запису не дотримується. Тоді процесор Р1 може записати дані в клітинку, а потім в цей осередок виконає запис процесор Р2. Строго послідовне виконання операцій запису гарантує два важливих наслідки для цієї послідовності операцій запису. По-перше, воно гарантує, що кожен процесор в машині в певний момент часу буде спостерігати запис, виконувану процесором Р2. Якщо послідовність операцій записи не дотримується, то може виникнути ситуація, коли який-небудь процесор буде спостерігати спочатку операцію записи процесора Р2, а потім - операцію записи процесора Р1 і буде зберігати це записане процесором Р1 значення необмежено довго.
Багатопроцесорні системи з локальною пам'яттю і багатомашинні системи. Другу групу машин складають великомасштабні системи з розподіленою пам'яттю. Для того щоб підтримувати велику кількість процесорів, доводиться основну пам'ять розподіляти між ними, в іншому випадку смуги пропускання пам'яті може просто не вистачити для задоволення запитів, що надходять від дуже великого числа процесорів. Природно, при такому підході також потрібне реалізувати зв'язок процесорів між собою. На рис. 4.15 показана структура такої системи.
Зростання числа процесорів вимагає створення моделі розподіленої пам'яті з високошвидкісною мережею для зв'язку процесорів. З швидким зростанням продуктивності процесорів і пов'язаним з цим посиленням вимоги збільшення смуги пропускання пам'яті масштаб систем (тобто число процесорів в системі), для яких потрібна організація розподіленої пам'яті, зменшується, так само як і скорочується число процессо-

Мал. 4.15. Типова архітектура мультипроцесорної системи з розподіленою пам'яттю