Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PRO_teoriya_26-30.doc
Скачиваний:
2
Добавлен:
21.09.2019
Размер:
119 Кб
Скачать
☆

Екзаменаційний білет №27

1. Порівняння кластерів та smp-систем.

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

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

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

2. Керування комунікаторами.

Для створення нових комунікаторів існують два основних способи:

  • дублювання вже існуючого комунікатора:

int MPI_Comm_dup (MPI_Comm oldcom, MPI_comm * newcom),

де

  • oldcom - існуючий комунікатор, копія якого створюється;

  • newcom - новий комунікатор;

  • створення нового комунікатора з підмножини процесів існуючого комунікатора:

int MPI_comm_create (MPI_Comm oldcom, MPI_Group group,

MPI_Comm * newcom),

де

  • oldcom - існуючий комунікатор;

  • group - підмножина процесів комунікатора oldcom;

  • newcom - новий комунікатор.

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

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

Для пояснення розглянутих функцій можна привести приклад створення комунікатора, в якому містяться всі процеси, крім процесу, що має ранг 0 в комунікаторі MPI_COMM_WORLD:

MPI_Group WorldGroup, WorkerGroup;

MPI_Comm Workers;

int ranks [1];

ranks [0] = 0;

// Отримання групи процесів в MPI_COMM_WORLD

MPI_Comm_group (MPI_COMM_WORLD, & WorldGroup);

// Створення групи без процесу з рангом 0

MPI_Group_excl (WorldGroup, 1, ranks, & WorkerGroup);

// Створення комунікатора по групі

MPI_Comm_create (MPI_COMM_WORLD, WorkerGroup, & Workers);

...

MPI_Group_free (& WorkerGroup);

MPI_Comm_free (& Workers);

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

int MPI_Comm_split (MPI_Comm oldcomm, int split, int key,

MPI_Comm * newcomm),

де

  • oldcomm - вихідний комунікатор;

  • split - номер комунікатора, якому має належати процес;

  • key - порядок рангу процесу в створюваному комунікаторі;

  • newcomm - створюваний комунікатор.

Створення комунікаторів відноситься до колективних операцій, і тому виклик функції MPI_Comm_split повинен бути виконаний в кожному процесі комунікатора oldcomm. В результаті виконання функції процеси поділяються на непересічні групи з однаковими значеннями параметра split. На основі сформованих груп створюється набір комунікаторів. Для того щоб вказати, що процес не повинен входити до жодного з створюваних комунікаторів, необхідно скористатися константою MPI_UNDEFINED як значення параметра split. При створенні комунікаторів для рангів процесів в новому комунікаторі вибирається такий порядок нумерації, щоб він відповідав порядку значень параметрів key (процес з великим значенням параметра key отримує більший ранг, процеси з однаковим значенням параметра key зберігають свою відносну нумерацію).

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

int MPI_Comm_free (MPI_Comm * comm),

де

  • comm - комунікатор, який підлягає видаленню.

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