Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_MPI_OpenMP.doc
Скачиваний:
11
Добавлен:
16.11.2019
Размер:
1.09 Mб
Скачать

3. Int mpi_Cart_rank(mpi_Comm comm, int *coords, int *rank)

IN comm коммуникатор с декартовой топологией (дескриптор)

IN coords целочисленный массив (размера ndims), описывающий декартовы координаты процесса

OUT rank номер указанного процесса (целое)

MPI_Cart_rank переводит логические координаты процессов в их физические номера (номер процесса в группе), которые используются при выполнении обменов.

Для размерности i с periods(i) = true, если координата cords(i) выходит за границу диапазона – coords(i)<0 или coords(i)≥dims(i), она автоматически сдвигается назад к интервалу 0≤coords(i)<dims(i). Выход координат за пределы диапазона неверен для непериодических размерностей.

4. Int mpi_Cart_coords(mpi_Comm comm, int rank, int maxdims, int *coords)

IN comm коммуникатор с декартовой топологией (дескриптор)

N rank номер процесса внутри группы comm (целое)

IN maxdims длина вектора coord (целое)

OUT coords целочисленный массив (размера ndims), содержащий декартовы координаты указанного процесса (целое)

MPI_Cart_coords используется для перевода номера процесса в группе в логическую координату.

5. Координаты декартова сдвига

Если топология это декартова структура, то MPI_SENDRECV часто используется вдоль какой-нибудь координаты, чтобы произвести сдвиг данных. На вход функции MPI_SENDRECV нужно подавать ранг источника для приёма и ранг приёмника для передачи. Вызов функции MPI_Cart_shift определяет эти аргументы.

MPI_Cart_shift(comm, direction, disp, rank_source, rank_dest)

IN comm - коммуникатор с декартовой структурой

IN direction - координата сдвига (integer)

IN disp - смещение (> 0: сдвиг вперёд, < 0: сдвиг назад) (integer)

OUT rank_source - ранг процесса источника (integer)

OUT rank_source - ранг процесса источника (integer)

direction определяет координату значение которой изменяется сдвигом. Координаты нумеруются от 0 до ndims-1, где ndims количество размерностей. В зависимости от периодичности декартовой группы по выделенной координате MPI_Cart_shift даёт циклический или конечный сдвиг. В случае конечного сдвига, в rank_source или rank_dest может быть возвращено значение MPI_PROC_NULL, которые отмечают, что источник или приёмник при сдвиге выходят за допустимые пределы.

Пример: На основе группы из 8 процессов создали декартову топологию: {2,4}, определим смещение disp =1

  1. Решетка процессов не периодичная, direction=0 задает сдвиг по строкам (вдоль столбцов)

0 1 2 3 0 проц. получает от проц. -1 и отправляет проц. 4

1 проц. получает от проц. -1 и отправляет проц. 5 4 5 6 7

0 ----- -1 rank_source 4 rank_dest

1 ----- -1 5

2 ----- -1 6

3 ----- -1 7

4 ----- 0 -1

5 ----- 1 -1

6 ----- 2 -1

7 ----- 3 -1

  1. Решетка процессов периодичная, direction=0 задает сдвиг по строкам (вдоль столбцов)

0 1 2 3 0 проц. получает от проц. 4 и отправляет проц. 4

1 проц. получает от проц. 5 и отправляет проц. 5 4 5 6 7

0 ----- 4 rank_source 4 rank_dest

1 ----- 5 5

2 ----- 6 6

3 ----- 7 7

4 ----- 0 0

5 ----- 1 1

6 ----- 2 2

7 ----- 3 3

  1. Решетка процессов не периодичная, direction=1 задает сдвиг по столбцам (вдоль строк)

0 1 2 3 0 проц. получает от проц. -1 и отправляет проц. 1

1 проц. получает от проц. 0 и отправляет проц. 2 4 5 6 7

0 ----- -1 rank_source 1 rank_dest

1 ----- 0 2

2 ----- 1 3

3 ----- -1 7

4 ----- 2 -1

5 ----- -1 5

6 ----- 4 6

7 ----- 6 -1

  1. Решетка процессов периодичная, direction=1 задает сдвиг по столбцам (вдоль строк)

0 1 2 3 0 проц. получает от проц. 3 и отправляет проц. 1

1 проц. получает от проц. 0 и отправляет проц. 2 4 5 6 7

0 ----- 3 rank_source 1 rank_dest

1 ----- 0 2

2 ----- 1 3

3 ----- 2 0

4 ----- 7 5

5 ----- 4 6

6 ----- 5 7

7 ----- 6 4

Конструктор универсальной (графовой) топологии