Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Паралельне програмування за технологією MPI . Операції з комунікаторами.Содержание книги
Поиск на нашем сайте Управління комунікаторами. Розглянемо управління комунікаторами, які використовуються для операцій передачі даних всередині однієї групи процесів. Для створення нових комунікаторів існують два основних способи: - дублювання вже наявного комунікатора: int MPI_Comm_dup(MPI_Comm oldcom, MPI_comm *newcom), де - oldcom - наявний комунікатор, копія якого створбється; - newcom - новий комунікатор; - створення нового комунікатора з підмножини процесів наявного комунікатора: int MPI_Comm_create(MPI_Comm oldcom, MPI_Group group, MPI_Comm *newcomm), де - oldcom - наявний комунікатор; - group - підмножина процесів комунікатора oldcom; - newcom - новий комунікатор. Дублювання комунікатора може застосовуватись, наприклад, для усунення можливості перетину по тегам повідомлень в різних частинах паралельної програми (в тому числі і при використанні функцій різних програмних бібліотек). Операція створення комунікаторів колективна, тобто повинна виконуватися всіма процесами вихідного комунікатора. Для пояснення розглянутих функцій можна навести приклад створення комунікатора, в якому містяться всі процеси, окрім процесу, що має ранг 0 в комунікаторі MPI_Comm_WORLD (такий комунікатор може бути корисним для підтримки схеми організації паралельних обчислень "менеджер-виконавці"): MPI_Group WorldGroup, WorkerGroup; MPI_Comm Workers; int ranks[1]; ranks[0] = 0; // Створення групи процесів в МРІ_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 oldcom, int split, int key, MPI_Comm *newcomm), де - nidcomm - вихідний комунікатор: - split - номер комунікатора, якому повинен належати процес: - key - порядок рангу процеса в створюваному комунікаторі; - newcomm - створюваний комунікатор. Створення комунікатора відноситься до колективних операцій, тому виклик функції MPI_Comm_split повинен бути викликаний в кожному процесі комунікатора oldcom. В результаті виконання функції процеси розділяються на групи, що не перетинаються, з однаковим значенням параметра split. На основі сформованих груп створюється набір комунікаторів. Для того, щоб вказати, що процес не повинен входити до жодного із створюваних комунікаторів, слід скористатися константою MPI_UNDEFINDED як значення параметра split. При створенні комунікаторів для рангів процесів в новому комунікаторі вибирається такий порядок нумерації, щоб він відповідав порядку значень параметрів key (процес з великим значенням параметра key отримує великий ранг, процеси з однаковим значенням параметра key зберігають свою відносну нумерацію). Як приклад, розглянемо задачу зображення набору процесів у вигляді двовимірної решітки. Нехай MPI_Comm comm; int rank, row; MPI_Comm_rank(MPI_COMM_WORLD, &rank); row = rank / q; MPI_Comm_split(MPI_COMM_WORLD, row, rank, &comm); За умови виконання цього прикладу, наприклад, коли int MPI_Comm_free(MPI_Comm *comm), де - comm - комунікатор, який підлягає видаленню.
|
||
|
Последнее изменение этой страницы: 2020-10-24; просмотров: 220; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.146 (0.008 с.) |