- •Екзаменаційний білет №26
- •Системи зі змінним часом звертання до пам’яті.
- •2.Керування групами процесів.
- •Екзаменаційний білет №27
- •1. Порівняння кластерів та smp-систем.
- •2. Керування комунікаторами.
- •Екзаменаційний білет №28
- •1. Системи зі змінним часом звертання до пам’яті.
- •2. Декартові топології (решітка).
- •Екзаменаційний білет №29
- •1. Порівняння кластерів та smp-систем.
- •2. Топології графа.
- •Екзаменаційний білет №30
- •1. Системи зі змінним часом звертання до пам’яті.
- •2.Загальна характеристика середовища виконання mpi-програм.
Екзаменаційний білет №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 - комунікатор, який підлягає видаленню.
