- •Федеральное агентство по атомной энергии
- •Национальный исследовательский ядерный университет «мифи»
- •Средства разработки параллельных приложений на общей и распределенной памяти в стандарте интерфейса передачи данных 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)
3. Mpi_Group_translate_ranks (mpi_Group group1, int n, int *ranks1, mpi_Group group2, int *ranks2)
IN group1 группа1 (дескриптор)
IN n число номеров в массивах ranks1 и ranks2 (целое)
IN ranks1 массив из номеров процессов в группе1
IN group2 группа2 (дескриптор)
OUT ranks2 массив соответствующих номеров процессов в группе2, MPI_UNDEFINED, если соответствие отсутствует.
Функция MPI_Group_translate_ranks определяет относительную нумерацию одинаковых процессов в двух различных группах. Например, если известны номера некоторых процессов в MPI_COMM_WORLD, то можно узнать их номера в подмножестве этой группы.
4. Mpi_Group _compare(group1, group2, result)
group1 первая группа (дескриптор)
group2 вторая группа (дескриптор)
OUT result результат (целое)
Функция MPI_Group_compare сравнивает группы. Если члены группы и их порядок в обеих группах одинаковы, результат будет MPI_IDENT. Если члены группы одинаковы, но порядок различен, то результат будет MPI_SIMILAR. В остальных случаях - MPI_UNEQUAL.
Конструкторы групп
Конструкторы создают новые группы на основе существующих групп. Данные операции являются локальными, и различные группы могут быть определены на различных процессах.
MPI не имеет механизма для формирования группы с нуля – группа может формироваться только на основе другой, предварительно определенной группы. Базовая группа, на основе которой определены все другие группы, является группой, связанной с коммуникатором MPI_COMM_WORLD (через функцию MPI_COMM_GROUP).
1. MPI_Comm_group(MPI_Comm comm, MPI_Group *group)
IN comm коммуникатор (дескриптор)
OUT group группа, соответствующая comm (дескриптор)
Функция MPI_Comm_group возвращает в group дескриптор группы из comm.
2. MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup)
IN group1 первая группа (дескриптор)
IN group2 вторая группа (дескриптор)
OUT newgroup объединенная группа (дескриптор)
Объединение (union) – содержит все элементы первой группы (group1) и следующие за ними элементы второй группы (group2), не входящие в первую группу.
3. MPI_Group_intersection(MPI_Group group1, MPI_Group group2,MPI_Group *newgroup)
IN group1 первая группа (дескриптор)
IN group2 вторая группа (дескриптор)
OUT newgroup группа, образованная пересечением (дескриптор)
Пересечение (intersect) – содержит все элементы group1, которые также находятся в group2 и упорядоченные, как в первой группе.
4. MPI_Group_difference(MPI_Group group1, MPI_Group group2,MPI_Group *newgroup)
IN group1 первая группа(дескриптор)
IN group2 вторая группа (дескриптор)
OUT newgroup исключенная группа (дескриптор)
Разность (difference) – содержит все элементы group1, которые не находятся в group2.
5. MPI_ Group_incl(group, n, ranks, newgroup)
IN group группа (дескриптор)
IN n количество элементов в массиве номеров (и размер newgroup, целое)
IN ranks номера процессов в group, перешедших в новую группу (массив целых)
OUT newgroup новая группа, полученная из прежней, упорядоченная согласно ranks
Cоздает новую группу, которая состоит из n процессов исходной группы group с номерами rank[0],..., rank[n-1]; процесс с номером i в newgroup есть процесс с номером ranks[i] в group. Если n = 0, то newgroup имеет значение MPI_GROUP_EMPTY.