Dekart topologiyasi
Dekart almashinuvi topologiyalarini yaratish va o'zgartirish operatsiyalari bilan tanishaylik. MPI_Cart_create subroutine yangi kommunikatorni yaratadi, bu esa kommutatorning dastlabki kartezian topologiyasini beradi:
int MPI_Cart_create (MPI_Comm comm_old, int ndims, int * dims, int * period, int reorder, MPI_Comm * comm_cart)
MPI_Cart_create (comm_old, ndims, dimlar, nuqtalar, tartibni o'zgartirish, comm_cart, ierr)
Kirish parametrlari:
• comm_old - original kommunikator;
• ndims - dekartli panjarasining o'lchami;
• dims - har bir o'lchovdagi jarayonlar sonini ko'rsatuvchi ndims elementlaridan tashkil topgan butun sonli massiv;
• periods - panjaraning har bir o'lchov bo'ylab davriy (to'g'ri) bo'lishini aniqlaydigan ndims elementlarining mantiqiy massivi;
• reorder - agar ushbu parametr qiymati "rost" bo'lsa, tizimga jarayonlarni raqamlash tartibini o'zgartirishga ruxsat beriladi.
Dekart topologiyasining tuzilishi haqidagi ma'lumotlar ndims, dims va period parametrlarida mavjud.
MPI_Cart_create - bu kollektiv operatsiya (bu subroutine dekart topologiyasi bilan ta'minlangan kommunikator tomonidan barcha jarayonlar tomonidan chaqirilishi kerak).
Virtual topologiyani yaratgandan so'ng, siz tegishli protsessual manzillar sxemasidan foydalanishingiz mumkin, ammo bu uchun uning dekart koordinatalari va aksincha, protsessor darajasini qayta hisoblash kerak. MPI_Cart_coords pastki dasturidan foydalanib, jarayonning dekartli koordinatalarini guruhdagi darajasi bo'yicha aniqlashingiz mumkin:
int MPI_Cart_coords (MPI_Comm comm, int rank, int maxdims, int * coords)
MPI_Cart_coords (comm, rank, maxdims, coords, ierr)
Kirish parametrlari:
• comm - dekart topologiyasi bilan kommunikator;
• rank – comm dagi jarayon rangi;
• maxdims - chaqiruv dasturidagi koordinatalar vektorining uzunligi.
Ushbu qism dasturining chiqish parametri - bu jarayonning dekart koordinatalarini o'z ichiga olgan bir o'lchovli butun massiv koordinatalari (uning o'lchami ndims).
MPI_Cart_rank pastki dasturi teskari ta'sirga ega. Uning yordami bilan siz jarayonning martabasini (rangini) kommunikator comm-dagi dekart koordinatalari bo'yicha aniqlay olasiz:
int MPI_Cart_rank (MPI_Comm comm, int * coords, int * martabali)
MPI_Cart_rank (kom, koordinatlar, daraja, ierr)
cords kirish parametrlari - bu jarayonning dekart koordinatalarini belgilaydigan ndims o'lchamdagi butun sonli massiv.
Misol
int MPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int *coords)
MPI_Cart_coords(comm, rank, maxdims, coords, ierr)
#include "mpi.h";
#include ;
int main(int argc,char *argv[])
{
MPI_Comm grid_comm;
int dims[2];
int periodic[2];
int reorder = 1, q = 5, ndims = 2, maxdims = 2;
int coordinates[2];
int my_grid_rank;
int coords[2];
MPI_Comm row_comm;
dims[0] = dims[1] = q;
periodic[0] = periodic[1] = 1;
coords[0] = 0; coords[1] = 1;
MPI_Init(&argc, &argv);
MPI_Cart_create(MPI_COMM_WORLD, ndims, dims, periodic, reorder, &grid_comm);
MPI_Comm_rank(grid_comm, &my_grid_rank);
MPI_Cart_coords(grid_comm, my_grid_rank, maxdims, coordinates);
printf("Process rank %i has coordinates %i %i\n", my_grid_rank, coordinates[0], coordinates[1]);
MPI_Finalize();
return 0;
}
Comm bilan bog'langan dekartian topologiyasi haqida ma'lumotni MPI_Cart_get qism dasturi yordamida olish mumkin:
int MPI_Cart_get(MPI_Comm comm, int maxdims, int *dims, int *periods, int *coords)
MPI_Cart_get(comm, maxdims, dims, periods, coords, ierr)
maxdims kirish parametrlari dims, perods va vectors massivlarining uzunligi va natijalari:
• dims - har bir o'lchov uchun jarayonlar sonini ko'rsatadigan butun sonli massiv;
• periods - har bir o'lchov uchun davriylikni (agar panjara davriy bo'lsa to'g'ri) aniqlaydigan mantiqiy qiymatlar qatori;
• coords - bu qism dasturni chaqiradigan jarayonning dekartli koordinatalarini belgilaydigan butun sonli massiv.
Do'stlaringiz bilan baham: |