
- •Федеральное агентство по атомной энергии
- •Национальный исследовательский ядерный университет «мифи»
- •Средства разработки параллельных приложений на общей и распределенной памяти в стандарте интерфейса передачи данных 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)
1. Mpi_Cart_create(mpi_Comm comm_old, int ndims, int *dims, int *periods, int reorder, mpi_Comm *comm_cart)
IN comm_old исходный коммуникатор (дескриптор)
IN ndims размерность создаваемой декартовой решетки (целое)
IN dims массив размера ndims, определяет количество процессов по каждой координате
IN periods массив логических элементов размера ndims, определяет, периодична (true) или нет (false) решетка в каждой размерности
IN reorder нумерация может быть сохранена (false) или переупорядочена (true)
OUT comm_cart коммуникатор новой декартовой топологии (дескриптор)
Функция MPI_Cart_create является коллективной, создает новый коммуникатор для описания декартовой топологии произвольной размерности. По каждой координате устанавливается признак периодичности. Если reorder = false, то номер каждого процесса в новой группе идентичен номеру в старой группе. Иначе функция может переупорядочить процессы (возможно, чтобы обеспечить хорошее наложение виртуальной топологии на физическую систему). Если полная размерность декартовой решетки меньше количества процессов в группе, то некоторые процессы возвращаются с результатом MPI_COMM_NULL. Вызов будет неверным, если он задает решетку большего размера, чем размер группы.
2. Mpi_Dims_create(int nnodes, int ndims, int *dims)
IN nnodes количество узлов решетки (целое)
IN ndims число размерностей (координат) декартовой решетки (целое)
INOUT dims целочисленный массив размера ndims, определяет количество процессов по каждой координате
Задает количество процессов по каждой размерности (координате). Элементы массива dims описывают декартову решетку координат с числом размерностей ndims и общим количеством узлов nnodes.
Если размерность dims[i] - положительное число, функция не будет изменять число узлов в направлении i; будут изменены только те элементы, для которых dims[i] = 0. Отрицательные значения dims[i] неверны. Также будет неверно, если значение nnodes не кратно произведению dims[i]. Аргумент dims[i], установленный вызывающей программой, будет упорядочен по убыванию. Массив dims удобен для использования в функции MPI_Cart_create в качестве входного. Функция является локальной.
Пример: Массив dims перед вызовом вызов функции, dims после выхода из функции
(0,0) MPI_DIMS_CREATE(6, 2, dims) (3,2)
(0,0) MPI_DIMS_CREATE(7, 2, dims) (7,1)
Функции запроса декартовой топологии
1. Mpi_Cartdim_get(mpi_Comm comm, int *ndims)
IN comm коммуникатор с декартовой топологией (дескриптор)
OUT ndims число размерностей в декартовой топологии системы (целое)
2. Mpi_Cart_get(mpi_Comm comm, int maxdims, int *dims, int *periods, int *coords)
IN comm коммуникатор с декартовой топологией (дескриптор)
IN maxdims длина векторов dims, periods и coords (целое)
OUT dims число процессов по каждой декартовой размерности (целочисленный массив)
OUT periods периодичность ( true/ false) для каждой декартовой размерности (массив логических элементов)
OUT coords координаты вызываемых процессов в декартовой системе координат (целочисленный массив)