НОУ ІНТУІТ, Лекція, Віртуальні топології
Віртуальні топології
Організація обміну полягає в властивостях комунікатора - описувача області взаємодії. Крім списку процесів та контексту обміну з комунікатором може бути пов'язана додаткова інформація.
Найважливішим різновидом такої інформації є топологія обмінів. У MPI топологія є механізм зіставлення процесам, що належать групі, альтернативних по відношенню до звичайної схеми нумерації.
Топології обмінів повідомленнями в MPI є віртуальними, вони пов'язані з фізичної топологією комунікаційної мережі паралельної обчислювальної системи. Використання комунікаторів та топологій відрізняє MPI від більшості інших систем передачі повідомлень.
Топологією у разі називають структуру з'єднань - ліній і вузлів мережі без урахування характеристик самих цих вузлів. Вузлами тут є процеси, з'єднаннями - канали обміну повідомленнями, а мережею ми фактично називаємо всі процеси, що входять до складу паралельної програми.
Часто в прикладних програмах процеси упорядковані відповідно до певної топології. Така ситуація виникає, наприклад, якщо виконуються розрахунки, у яких використовуються грати (сітки). Це можливо при програмуванні сіткових методів розв'язання диференціальних рівнянь, а також в інших випадках.
Знання топології завдання можна використовуватиме того, щоб ефективно розподілити процеси між процесорами паралельної обчислювальної системи.
У MPI існують два типи топології:декартоватопологія - прямокутна решітка довільної розмірності та топологіяграфа(у цьому випадку процеси з'єднані між собою ребрами, що показують напрямок обміну).

Над топологіями можнавиконувати різні операції. Декартові грати можна розщеплювати на гіперплощині, видаляючи деякі виміри. Дані можна зрушувати вздовж обраного виміру декартових грат. Зсувом у разі називають пересилання даних між процесами вздовж певного виміру. Уздовж обраного виміру можуть бути організовані колективні обміни.
Для того, щоб зв'язати структуру решітки декарту з комунікатором MPI_COMM_WORLD , необхідно задати наступні параметри:
- розмірністьрешітки (значення 2, наприклад, відповідає плоскій решітці);
- розміррешітки вздовж кожного виміру (розміри , наприклад, відповідають прямокутній плоскій решітці, протяжність якої вздовж осі x становить 10 вузлів-процесів, а вздовж осі y - 5 вузлів);
- граничні умовивздовж кожного виміру (решітка може бути періодичною, якщо процеси, що знаходяться на протилежних кінцях ряду, взаємодіють між собою).
MPI дозволяє системі оптимізувати відображення віртуальної топології процесів на фізичну за допомогою зміни порядку нумерації процесів у групі.
Декартова топологія
Познайомимося з операціями створення та перетворення декартових топологій обміну. Підпрограма MPI_Cart_create створює новий комунікатор comm_cart, наділяючи декартовою топологією вихідний комунікатор comm_old:
- comm_old – вихідний комунікатор;
- ndims - розмірність декартових грат;
- dims - цілий масив, що складається з ndims елементів, що задає кількість процесів у кожному вимірі;
- periods - логічний масив з ndims елементів, який визначає, чи є решітка періодичної (значення true) вздовж кожного виміру;
- reorder - приУ цьому параметрі "істина" системі дозволено змінювати порядок нумерації процесів.
Інформація про структуру декартової топології міститься у параметрах ndims, dims та periods.
MPI_Cart_create є колективною операцією (цю підпрограму мають викликати всі процеси з комунікатора, що наділяється декартовою топологією).
- comm – комунікатор, наділений декартовою топологією;
- rank - ранг процесу в comm;
- maxdims - довжина вектора coords у програмі, що викликає.
Вихідним параметром цієї підпрограми є одномірний цілий масив coords (його розмір дорівнює ndims ), що містить декартові координати процесу.
Зворотну дію має підпрограма MPI_Cart_rank. З її допомогою можна визначити ранг процесу (rank) за його декартовими координатами в комунікаторі comm:
Вхідний параметр coords - цілий масив розміру ndims , що задає декартові координати процесу.
Інформацію про декартову топологію, пов'язану з комунікатором comm , можна отримати за допомогою підпрограми MPI_Cart_get :
Вхідний параметр maxdims задає довжину масивів dims , periods і vectors у програмі, що викликає, а вихідні параметри :
- dims - цілий масив, що задає кількість процесів для кожного вимірювання;
- periods - масив логічних значень, що задають періодичність (true, якщо решітка періодична) для кожного виміру;
- coords - цілий масив, що задає декартові координати процесу, що викликає підпрограму.
Топологія графа
Підпрограма MPI_Graph_create створює новий комунікатор comm_graph, наділений топологією графа:
- comm – вихідний комунікатор, не наділений топологією;
- nnodes - кількістьвершин графа;
- index - цілий одномірний масив, що містить порядок кожного вузла (кількість пов'язаних з ним ребер);
- edges - цілий одномірний масив, що описує ребра графа;
- reorder - значення "істина" дозволяє зміну порядку нумерації процесів.
Отримати інформацію про топологію графа, пов'язану з комунікатором comm , можна за допомогою підпрограми MPI_Graph_get :
- comm – комунікатор;
- maxindex - довжина масиву index у зухвалій програмі;
- maxedges - довжина масиву edges в програмі, що викликає.
- index - цілий масив, що містить структуру графа;
- edges - цілий масив, що містить відомості про ребрах графа.
Підпрограма MPI_Graphdims_get дозволяє отримати інформацію про топологію графа, пов'язану з комунікатором comm:
Вихідними параметрами цієї підпрограми є:
- nnodes – кількість вершин графа;
- nedges – кількість ребер графа.
Визначити тип топології (toptype), пов'язаної з комунікатором comm, можна за допомогою підпрограми:
Вихідним параметром є тип топології toptype (значення MPI_CART для декартової топології та MPI_GRAPH для топології графа).