Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Группирование задач по коммуникаторам






 

Процессы связываются не только с ранга м и, но и с ко мм уникатора м и. Коммуникатор определяет область коммуникации для некоторого множества процессов. Все процессы, связанные с одним и тем же коммуникатором, относятся к одной и той же группе коммуникации. Работу, выполняемую MPI-программой, можно разделить между группами коммуникаций. По умолчанию все процессы относятся к группе MPI_C0MM_WORLD. Для создания новых ко м муникаторов можно использовать функцию MPI_Comm_create (). Список функций (с краткими описаниями), используемых для работы с коммуникаторами, приведен в табл. 9.1.

Благодаря использованию рангов и коммуникаторов MPI-задачи легко идентифицировать и различать. Ранг и коммуникатор позволяют структурировать программу как SPMD- или MPMD-модель либо как некоторую их комбинацию. Для упрощения кода MPI-программы мы используем ранг и коммуникатор в сочетании с параметризованным программированием и объектно-ориентированными методами. Шаблоны можно использовать не только при м енительно к аспекту различных данных SIMD-модели, но и к заданию различных типов данных. Это значительно упрощает структуру многих приложений, требующих выполнения большого объема одинаковых вычислений, но с различными типами данных. Для реализации модели MPMD (MIMD) мы рекоменлуем использовать динамический полиморфизм (поддерживаемый объектами), параметрический полиморфизм (поддерживаемый шаблонами), объекты-функции и предикаты. Для разделения всего объема работы MPI-приложения эти методы используются в сочетании с рангами и коммуникаторами MPI-процессов. При использовании объектно-ориентированного подхода работа программы делится между семействами объектов. Все семейства объектов связываются с различными коммуникаторами. Соответствие семейств объектов различным коммуникаторам способствует модульности проекта MPI-приложения. Такой способ разделения также помогает понять, как следует применить параллелизм. Мы убедились, что объектно-ориентированный подход делает MPl-программы более открытыми для расширения, атакже простыми для поддержки, отладки и тестирования.

|Таблица 9.1. Функции, используемыедля работы с коммуникаторами

 

Функции Описание
int MPI_Intercomm_create (MPI_Comm LocalComm, int LocalLeader, MPI_Comm PeerComm, int remote_leader, int MessageTag, MPI_Comm *CommOut); Создает inter -коммуникатор из двух intraкоммуникаторов
int MPI_Intercomm_merge (MPI_Comm Comm, int High, MPI_Comm *CommOut); Соз д ает intra -коммуникатор из inter- коммуникатора
int MPI_Cartdim_get (MPI_Comm Comm, int *NDims); Возвращает декартову топологическую информацию, связанную с коммуникатором
int MPI_Cart_create (MPI_Comm CommOld, int NDims, int *Dims, int *Periods, int Reorder, MPI_Comm *CommCart) Создает новый коммуникатор, к которому присоединяется топологическая информация
int MPI_Cart_sub (MPI_Comm Comm, int *RemainDims, MPI_Comm *CommNew); Делит коммуникатор на подгруппы, которые образуют декартовы подсистемы более низкой размерности
int MPI_Cart_shift (MPI_Comm Comm, int Direction, int Display, int *Source, int *Destination); Считывает смещенные ранги источника и приемника при заданном направлении и величине смещения
int MPI_Cart_map (MPI_Comm CommOld, int NDims, int *Dims, int *Periods, int *Newrank); Преобразует процесс в декартову топологическую информацию
int MPI_Cart_get (MPI_Comm Comm, int MaxDims, int *Dims, int *Periods, int *Coords); Возвращает декартову топологическую информацию, связанную с коммуникатором
int MPI_Cart_coords (MPI_Comm Comm, int Rank, int MaxDims, int *Coords); Вычисляет координаты процесса в декартовой топологии при заданном ранге в группе
int MPI_Comm_create (MPI_Comm Comm, MPI_Group Group, MPI_Comm *CommOut); Создает новый коммуникатор
int MPI_Comm_rank (MPI_Comm Comm, int *Rank); Вычисляет и возвращает ранг вызывающего процесса в коммуникаторе
int MPI_Cart_rank (MPI_Comm Comm, int *Coords, int *Rank); Вычисляет и возвращает ранг процесса в коммуникаторе при заданном декартовом местоположении
int MPI_Comm_compare (MPI_Comm Comm1, MPI_Comm Comm2, int *Result); Сравнивает два коммуникатора Comm1 и Comm2

 

int MPI_Comm_dup (MPI_Comm CommIn, MPI_Comm *CommOut); Дублирует уже существующий коммуникатор со всей его кашированной информацией
int MPI_Comm_free (MPI_Comm *Comm); Отмечает объект коммуникатора как освобожденный
int MPI_Comm_group (MPI_Comm Comm, MPI_Group *Group); Получает доступ к группе, связанной с заданным коммуникатором
int MPI_Comm_size (MPI_Comm Comm, int *Size); Вычисляет и возвращает размер группы, связанной с заданным коммуникатором
int MPI_Comm_split (MPI_Comm Comm, int Color, int Key, MPI_Comm *CommOut); Создает новые коммуникаторы на основе цветов и ключей
int MPI_Comm_test_inter (MPI_Comm Comm, int *Flag); Определяет, является ли коммуникатор inter-коммуникатором
int MPI_Comm_remote_group (MPI_Comm Comm, MPI_Group *Group); Получает доступ к удаленной группе, связанной с заданным inter-коммуникатором
int MPI_Comm_remote_size (MPI_Comm Comm, int *Size); Вычисляет и возвращает размер удаленной
  группы, связанной с заданным inter-
  коммуникатором

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.