Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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); За умови виконання цього прикладу, наприклад, коли , процеси з рангами (0, 1, 2) утворюють перший комунікатор, процеси з рангами (3, 4, 5) - другий і т.д. Після завершення використання комунікатор повинен бути видалений, для чого використовується функція: int MPI_Comm_free(MPI_Comm *comm), де - comm - комунікатор, який підлягає видаленню.
|
||||
Последнее изменение этой страницы: 2020-10-24; просмотров: 168; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.59.54.188 (0.005 с.) |