Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BILET11-15.doc
Скачиваний:
1
Добавлен:
21.09.2019
Размер:
166.91 Кб
Скачать
  1. Системи зі змінним часом звертання до пам’яті.(numa)

  2. Обчислювальні системи з розподіленою пам’яттю.

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

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

Дана система може практично необмежено розростатись і вартість такої системи значно менша ніж інші паралельні системи.

Дані системи отримали назву - комп’ютери з масовим розпаралеленням або масово паралельні комп’ютери. Перевагами цих систем є можливість розв’язку декількох паралельних незалежних або слабозв’язаних задач. Також перевагою можна вказати відносну простоту та дешевизну створення. Недоліками є складна організація роботи такої системи (синхронізація даних, реалізація механізму повідомлень між комп’ютерами) та великі накладні витрати при передачі даних по мережі. По характеру зв’язків між ЕОМ даної системи можна виділити наступні типи:

1. Непрямі або слабозв’язані.

2. Прямо-зв’язані.

3. Сателітний зв'язок.

2. Організація неблокуючих обмінів даними між процесорами.

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

MPI забезпечує можливість неблокуючого виконання операцій передачі даних між двома процесами. Найменування неблокуючих аналогів утворюється з назв відповідних функцій шляхом додавання префікса I (Immediate). Список параметрів неблокуючих функцій містить звичайний набір параметрів вихідних функцій і один додатковий параметр request з типом MPI_Request (у функції MPI_Irecv відсутній також параметр status):

int MPI_Isend (void * buf, int count, MPI_Datatype type, int dest,

int tag, MPI_Comm comm, MPI_Request * request),

int MPI_Issend (void * buf, int count, MPI_Datatype type, int dest,

int tag, MPI_Comm comm, MPI_Request * request),

int MPI_Ibsend (void * buf, int count, MPI_Datatype type, int dest,

int tag, MPI_Comm comm, MPI_Request * request),

int MPI_Irsend (void * buf, int count, MPI_Datatype type, int dest,

int tag, MPI_Comm comm, MPI_Request * request),

int MPI_Irecv (void * buf, int count, MPI_Datatype type, int source,

int tag, MPI_Comm comm, MPI_Request * request).

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

Перевірка стану виконуваної неблокуючої операції передачі даних проводиться за допомогою функції:

int MPI_Test (MPI_Request * request, int * flag, MPI_status * status),

де

• request - дескриптор операції, визначений при виклику неблокуючих функцій;

• flag - результат перевірки (true, якщо операція завершена);

• status - результат виконання операції обміну (тільки для завершеної операції).

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

MPI_Isend (buf, count, type, dest, tag, comm, & request);

ѕ

do {

ѕ

MPI_Test (& request, & flag, & status);

} While (! Flag);

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

int MPI_Wait (MPI_Request * request, MPI_status * status),

де

• request - дескриптор операції, визначений при виклику неблокуючої функції;

• status - результат виконання операції обміну (тільки для завершеної операції).

Крім розглянутих, MPI містить ряд додаткових функцій перевірки та очікування неблокуючих операцій обміну:

• MPI_Testall - перевірка завершення всіх перерахованих операцій обміну;

• MPI_Waitall - очікування завершення всіх операцій обміну;

• MPI_Testany - перевірка завершення хоча б однієї з перерахованих операцій обміну;

• MPI_Waitany - очікування завершення кожної з перерахованих операцій обміну;

• MPI_Testsome - перевірка завершення кожної з перерахованих операцій обміну;

• MPI_Waitsome - очікування завершення хоча б однієї з перерахованих операцій обміну та оцінка стану по всіх операціях.

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

БІЛЕТ №13

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]