- •Федеральное агентство по атомной энергии
- •Национальный исследовательский ядерный университет «мифи»
- •Средства разработки параллельных приложений на общей и распределенной памяти в стандарте интерфейса передачи данных mpi и openmp c реализации курс лекций
- •Void main(int argc, char *argv[] ){
- •Int rank, size;
- •Int mpi_Send(void* buf, int count, mpi_Datatype datatype, int dest, int tag, mpi_Comm comm)
- •Int mpi_Get_count(mpi_Status *status, mpi_Datatype datatype, int *count)
- •Стандартный режим передачи
- •Буферизующий режим передачи
- •1. Барьерная синхронизация - mpi_Barrier (comm)
- •2. Широковещательная передача
- •3. Сбор данных
- •4. Рассылка данных
- •5. Операции редукции (обработки данных)
- •Непрерывный.
- •2. Вектор
- •Int mpi_Type_hvector(int count, int blocklength, int stride, mpi_Datatype oldtype,
- •4. Индексированные данные
- •6. Структурный
- •3. Mpi_Group_translate_ranks (mpi_Group group1, int n, int *ranks1, mpi_Group group2, int *ranks2)
- •4. Mpi_Group _compare(group1, group2, result)
- •6. Mpi_Group _excl(group, n, ranks, newgroup)
- •1. Mpi_Comm_size (comm, size)
- •2. Mpi_Comm_rank(comm, rank)
- •3. Mpi_Comm_compare(comm1, comm2, result)
- •1. Mpi_Comm_dup(comm, newcomm)
- •2. Mpi_Comm_create(comm, group, newcomm)
- •3. Mpi_Comm_split(comm, color, key, newcomm)
- •1. Mpi_Cart_create(mpi_Comm comm_old, int ndims, int *dims, int *periods, int reorder, mpi_Comm *comm_cart)
- •2. Mpi_Dims_create(int nnodes, int ndims, int *dims)
- •1. Mpi_Cartdim_get(mpi_Comm comm, int *ndims)
- •2. Mpi_Cart_get(mpi_Comm comm, int maxdims, int *dims, int *periods, int *coords)
- •3. Int mpi_Cart_rank(mpi_Comm comm, int *coords, int *rank)
- •4. Int mpi_Cart_coords(mpi_Comm comm, int rank, int maxdims, int *coords)
- •5. Координаты декартова сдвига
- •Int mpi_Graph_create(mpi_Comm comm_old, int nnodes, int *index, int *edges, int reorder, mpi_Comm *comm_graph)
- •Int mpi_Topo_test(mpi_Comm comm, int *status)
- •Default(shared | none)
- •Void main()
- •Void main()
- •Int a[10], b[10], c[10]; // целочисленные массивы
- •2. Оператор sections
- •3. Оператор single
- •Void main()
- •10. Функция omp_get_nested
- •Int omp_get_nested(void)
6. Mpi_Group _excl(group, n, ranks, newgroup)
IN group группа (дескриптор)
IN n количество элементов в массиве номеров (целое)
IN ranks массив целочисленных номеров в group, не входящих в newgroup
OUT newgroup новая группа, полученная из прежней, сохраняющая порядок, определенный group (дескриптор)
Создает новую группу, путем удаления из group процессов с номерами ranks[0] ,...ranks[n-1]. Если n = 0, то newgroup идентична group.
Деструктор групп - MPI_Group _free(group)
INOUT group идентификатор группы (дескриптор)
Функции доступа к коммуникаторам
Все следующие операции являются локальными.
1. Mpi_Comm_size (comm, size)
IN comm коммуникатор (дескриптор)
OUT size количество процессов в группе comm (целое)
Эта функция указывает число процессов в коммуникаторе. Для MPI_COMM_WORLD она указывает общее количество доступных процессов.
2. Mpi_Comm_rank(comm, rank)
IN comm коммуникатор (дескриптор)
OUT rank номер вызывающего процесса в группе comm (целое)
Функция MPI_Comm_rank возвращает номер процесса в частной группе коммуникатора. Ее удобно использовать cовместно с MPI_Comm_size.
3. Mpi_Comm_compare(comm1, comm2, result)
IN comm1 первый коммуникатор (дескриптор)
IN comm2 второй коммуникатор (дескриптор)
OUT result результат (целое)
Функция MPI_Comm_compare сравнивает контексты коммуникаторов. Результат MPI_IDENT имеет место тогда и только тогда, когда comm1 и comm2 являются дескрипторами для одного и того же объекта. Результат MPI_CONGRUENT имеет место в том случае, если исходные группы идентичны по компонентам и нумерации; в этом случае коммуникаторы отличаются только контекстом. Результат MPI_SIMILAR имеет место, если члены группы обоих коммуникаторов являются одинаковыми, но порядок их нумерации различен. В противном случае выдается результат MPI_UNEQUAL.
Конструкторы коммуникаторов
Ниже перечисленные функции являются коллективными и вызываются всеми процессами в группе, связанной с comm. В MPI для создания нового коммуникатора необходим исходный коммуникатор. Основным коммуникатором для всех MPI коммуникаторов является коммуникатор MPI_COMM_WORLD.
1. Mpi_Comm_dup(comm, newcomm)
IN comm коммуникатор (дескриптор)
OUT newcomm копия comm (дескриптор)
Функция MPI_Comm_dup дублирует существующий коммуникатор comm, возвращает в аргументе newcomm новый коммуникатор с той же группой.
2. Mpi_Comm_create(comm, group, newcomm)
IN comm коммуникатор (дескриптор)
IN group группа, являющаяся подмножеством группы comm (дескриптор)
OUT newcomm новый коммуникатор (дескриптор)
Функция создает новый коммуникатор newcomm с коммуникационной группой, определенной аргументом group и новым контекстом. Из comm в newcomm не передается никакой кэшированной информации. Функция возвращает MPI_COMM_NULL для процессов, не входящих в group. Запрос неверен, если не все аргументы в group имеют одинаковое значение или если group не является подмножеством группы, связанной с comm. Заметим, что запрос должен быть выполнен всеми процессами в comm, даже если они не принадлежат новой группе.