- •Екзаменаційний білет №26
- •Системи зі змінним часом звертання до пам’яті.
- •2.Керування групами процесів.
- •Екзаменаційний білет №27
- •1. Порівняння кластерів та smp-систем.
- •2. Керування комунікаторами.
- •Екзаменаційний білет №28
- •1. Системи зі змінним часом звертання до пам’яті.
- •2. Декартові топології (решітка).
- •Екзаменаційний білет №29
- •1. Порівняння кластерів та smp-систем.
- •2. Топології графа.
- •Екзаменаційний білет №30
- •1. Системи зі змінним часом звертання до пам’яті.
- •2.Загальна характеристика середовища виконання mpi-програм.
Екзаменаційний білет №26
Системи зі змінним часом звертання до пам’яті.
Системи із змінним часом звернення до пам’яті (NUMA - non uniform memory access).
UMA-системи (uniform memory access). Мультипроцесорні системи, у яких всі процесори мають доступ до всього адресного простору головної пам’яті і можуть виконувати як операції читання, так і запису. Час звернення якого-небудь процесора до любої комірки пам’яті один і той же.
NUMA-системи. Мультипроцесорні системи, у яких всі процесори мають доступ до всього адресного простору головної пам’яті і можуть виконувати як операції читання, так і запису. Час звернення процесора до комірки пам’яті залежить від того, в якому адресному просторі він знаходиться. Для різних процесорів „швидких” і „повільних” підпростори головної пам’яті можуть відрізнятись.
CC-NUMA-системи (cache-coherent NUMA). NUMA-системи в якій забезпечується підтримка інформаційної цілісності даних в кешах всіх процесорів.
NUMA-системи без підтримки інформаційної цілісності даних в кешах досить схожі на кластери. В останній час більше уваги до себе притягують комерційні CC-NUMA-системи, які багато в чому відрізняються як від кластерів, так і від SMP-систем.
2.Керування групами процесів.
Процеси паралельної програми об'єднуються в групи. До групи можуть входити всі процеси паралельної програми, з іншого боку, в групі може перебувати тільки частина наявних процесів. Один і той же процес може належати кільком групам.
Управління групами
Групи процесів можуть бути створені тільки з вже існуючих груп. В якості вихідної групи може бути використана група, пов'язана з визначеним комунікатором MPI_COMM_WORLD. Також іноді може бути корисним комунікатор MPI_COMM_SELF, визначений для кожного процесу паралельної програми та містить тільки цейпроцес.
Для отримання групи, пов'язаної з існуючим комунікатором, застосовується функція:
int MPI_Comm_group (MPI_Comm comm, MPI_Group * group),
де
comm - комунікатор;
group - група, пов'язана з комунікатором.
Далі, на основі існуючих груп, можуть бути створені нові групи:
створення нової групи newgroup з існуючої групи oldgroup, яка буде включати в себе n процесів - їх ранги перераховуються в масиві ranks:
int MPI_Group_incl (MPI_Group oldgroup, int n, int * ranks,
MPI_Group * newgroup),
де
oldgroup - існуюча група;
n - число елементів в масиві ranks;
ranks - масив рангів процесів, які будуть включені в нову групу;
newgroup - створена група;
створення нової групи newgroup з групи oldgroup, яка буде включати в себе n процесів, чиї ранги не збігаються з рангами, перерахованими в масиві ranks:
int MPI_Group_excl (MPI_Group oldgroup, int n, int * ranks,
MPI_Group * newgroup),
де
oldgroup - існуюча група;
n - число елементів в масиві ranks;
ranks - масив рангів процесів, які будуть виключені з нової групи;
newgroup - створена група.
Для отримання нових груп над наявними групами процесів можуть бути виконані операції об'єднання, перетину і різниці:
створення нової групи newgroup як об'єднання груп group1 і group2:
int MPI_Group_union (MPI_Group group1, MPI_Group group2,
MPI_Group * newgroup),
де
group1 - перша група;
group2 - друга група;
newgroup - об'єднання груп;
створення нової групи newgroup як перетину груп group1 і group2:
int MPI_Group_intersection (MPI_Group group1, MPI_Group group2,
MPI_Group * newgroup),
де
group1 - перша група;
group2 - друга група;
newgroup - перетин груп;
створення нової групи newgroup як різниці груп group1 і group2:
int MPI_Group_difference (MPI_Group group1, MPI_Group group2,
MPI_Group * newgroup),
де
group1 - перша група;
group2 - друга група;
newgroup - різниця груп;
При конструюванні груп може виявитися корисною спеціальна порожня група MPI_COMM_EMPTY.
Ряд функцій MPI забезпечує отримання інформації про групу процесів:
отримання кількості процесів в групі:
int MPI_Group_size (MPI_Group group, int * size),
де
group - група;
size - число процесів в групі;
отримання рангу поточного процесу в групі:
int MPI_Group_rank (MPI_Group group, int * rank),
де
group - група;
rank - ранг процесу в групі.
Після завершення використання група повинна бути вилучена:
int MPI_Group_free (MPI_Group * group),
де
group - група, що підлягає видаленню