Topologia kartezjańska  

 

MPI_Cart_create
 
Funkcja ta służy do uporządkowania procesów według topologii kartezjańskiej. Zmienna comm_old podaje uchwyt do komunikatora wejściowego, ndims ilość wymiarów układu kartezjańskiego, dims - tablica specyfikująca ilość procesów w każdym wymiarze, periods - tablica wartości logicznych specyfikująca, gdzie siatka jest okresowa, reorder to flaga oznaczająca czy numery procesów mogą być zmienione (TRUE) czy nie (FALSE), comm_cart jest uchwytem do komunikatora z topologią kartezjańską.

Gdy liczba węzłów w siatce kartezjańskiej jest mniejsza niż liczba dostępnych procesów, niektóre z procesów wywołujących funkcję otrzymuje z wartość MPI_COMM_NULL. MPI_CART_CREATE można używać do tworzenia struktur o dowolnej liczbie wymiarów. Aby rozmieścić procesy na siatce kartezjańskiej używamy funkcji MPI_DIMS_CREATE. Użytkownik może wyspecyfikować ilość węzłów, które mają być w danym wymiarze. Aby tego dokonać, należy odpowiednie pola w tabeli dims ustawić na wartości dodatnie. Modyfikowane będą tylko pola o wartości 0.

MPI_Cart_create (comm_old,ndims,*dims[],*periods,
...... reorder,*comm_cart)
MPI_CART_CREATE (comm_old,ndims,dims(),periods,
...... reorder,comm_cart,ierr)

 
MPI_Dims_create

Tworzy podział procesów na kartezjańską siatkę, gdzie nnodes określa liczbę węzłów w siatce, ndims określa liczbę wymiarów siatki kartezjańskiej, dims tablica zawierająca liczbę procesów w każdym z wymiarów.

MPI_Dims_create (nnodes,ndims,*dims[])
MPI_DIMS_CREATE (nnodes,ndims,dims(),ierr)

Poniższa tabela przedstawia efekt działania funkcji MPI_DIMS_CREATE w zależności od danych wejściowych


tablica dims przed wywołaniem MPI_DIMS_CREATE wywołanie MPI_DIMS_CREATE tablica dims po wywołaniu MPI_DIMS_CREATE
(0, 0) MPI_DIMS_CREATE (6, 2, dims) (3, 2)
(0,0) MPI_DIMS_CREATE (7, 2, dims) (7, 1)
(0, 3, 0) MPI_DIMS_CREATE (6, 3, dims) (2, 3, 1)
(0, 3, 0) MPI_DIMS_CREATE (7, 3, dims) błąd