Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Process Groups & Communicators  Communicator is a group of processes that can communicate with one another.  Can create sub-groups of processes, or.

Similar presentations


Presentation on theme: "1 Process Groups & Communicators  Communicator is a group of processes that can communicate with one another.  Can create sub-groups of processes, or."— Presentation transcript:

1 1 Process Groups & Communicators  Communicator is a group of processes that can communicate with one another.  Can create sub-groups of processes, or sub- communicators  Cannot create process groups or sub- communicators from scratch  Need to create sub-groups or sub-communicators from some existing groups or communicators  i.e. need to start from MPI_COMM_WORLD (or MPI_COMM_SELF)

2 2 Sub-communicators Communicator Process Group Process sub-group Sub-communicator MPI_Comm MPI_Group

3 3 Communicator  Process Group  MPI_Group is a handle representing a process group in C; in Fortran it is an integer  MPI_GROUP_EMPTY, predefined, no member in group  MPI_GROUP_NULL, predefined, an invalid handle  MPI_COMM_GROUP gets group associated with communicator int MPI_Comm_group(MPI_Comm comm, MPI_Group *group) MPI_COMM_GROUP(COMM, GROUP, IERROR) integer COMM, GROUP, IERROR... MPI_Group group; MPI_Comm_group(MPI_COMM_WORLD, &group);...

4 4 Process Groups  MPI_Group_size (): number of processes in group  MPI_Group_rank (): rank of calling process in group; if does not belong to group, return MPI_UNDEFINED int MPI_Group_size(MPI_Group group, int *size) int MPI_Group_rank(MPI_Group group, int *rank) int ncpus, rank; MPI_Group MPI_GROUP_WORLD;... MPI_Comm_group(MPI_COMM_WORLD, &MPI_GROUP_WORLD); MPI_Group_size(MPI_GROUP_WORLD, &ncpus); MPI_Group_rank(MPI_GROUP_WORLD, &rank);...

5 5 Group Constructor/Destructor  MPI_Group_incl : create a new group newgroup consisting of n processes in group whose ranks are specified in *ranks ;  MPI_Group_excl : create a new group newgroup consisting of processes from group excluding those n processes specified in *ranks ; int MPI_Group_incl(MPI_Group group, int n, int *ranks, MPI_Group *newgroup) int MPI_Group_excl(MPI_Group group, int n, int *ranks, MPI_Group *newgroup) int MPI_Group_free(MPI_Group *group); MPI_Group MPI_GROUP_WORLD, slave; int ranks[1]; ranks[0] = 0; MPI_Comm_group(MPI_COMM_WORLD, &MPI_GROUP_WORLD); MPI_Group_excl(MPI_GROUP_WORLD, 1, &ranks, &slave);... MPI_Group_free(&slave);

6 6 Process Group  Communicator  Only communicators can be used in communication routines  MPI_Comm_create (): create a communicator from a process group  group is a sub-group of that associated with comm  Collective operation int MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm) MPI_Group MPI_GROUP_WORLD, slave; MPI_Comm slave_comm; int ranks[1]; Ranks[0] = 0; MPI_Comm_group(MPI_COMM_WORLD, &MPI_GROUP_WORLD); MPI_Group_excl(MPI_GROUP_WORLD, 1, &ranks, &slave); MPI_Comm_create(MPI_COMM_WORLD, slave, &slave_comm);... MPI_Group_free(&slave); MPI_Comm_free(&slave_comm);

7 7 Communicator Constructors  MPI_Comm_dup (): duplicate communicator  Same group of processes, but different communication context  Communications sent using duplicated comm cannot be received with original comm.  Used for writing parallel libraries; will not interfere with user’s communications  Collective routine; All processes must call same function int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm)

8 8 Communicator Constructors  Partition comm into disjoint sub-communicators, one for each value color  Processes providing same color values will belong to the same new communicator newcomm  Within newcomm, processes ranked based on key values that are provided  color must be non-negative.  If MPI_UNDEFINED is provided in color, MPI_COMM_NULL will be returned in newcomm. int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm) int rank, color; MPI_Comm newcomm; MPI_Comm_rank(MPI_COMM_WORLD, &rank); color = rank%3; MPI_Comm_split(MPI_COMM_WORLD, color, rank, &newcomm);...

9 9 Process Virtual Topology  Linear ranking (0, 1, …, N-1) often does not reflect logical communication patterns of processes  Desirable to arrange processes logically to reflect the topological patterns underlying the problem geometry or numerical algorithm, e.g. 2D or 3D grids  Virtual topology: this logical process arrangement  Virtual topology does not reflect machine’s physical topology  Can build virtual topology on communicators

10 10 Virtual Topology  Communication patterns can be described by a graph in general  Nodes stand for processes  Edges connect processes that communicate with each other  Many applications use process topologies like rings, 2D or high-D grids or tori.  MPI provides 2 topology constructors  Cartesian topology  General graph topology

11 11 Cartesian Topology  n-dimensional Cartesian topology  (m1, m2, m3, …, mn) grid; mi is the number of processes in i-th direction  A process can be represented by its coordinate (j1, j2, j3, …, jn), where 0<=js<=ms  Constructor: MPI_Cart_create()  Translation:  Process rank  coordinate  Coordinate  process rank

12 12 Cartesian Constructor  comm_old : existing communicator  ndims : dimension of Cartesian topology  dims : vector, dimension [ ndims ], number of processes in each direction  periods : vector, dimension [ ndims ], true or false, priodic or not in each direction  reorder : true  may reorder rank; false, no re-ordering of ranks  comm_cart : new communicator with Cartesian topology Int MPI_Cart_create(MPI_Comm comm_old, int ndims, int *dims, int *periods, int reorder, MPI_Comm *comm_cart) MPI_Comm comm_new; int dims[2], periods[2], ncpus; MPI_Comm_size(MPI_COMM_WORLD, &ncpus); dims[0] = 2; dims[1] = ncpus/2; // assume ncpus dividable by 2 periods[0] = periods[1] = 1; MPI_Cart_create(MPI_COMM_WORLD, 2, dims, periods, 0, &comm_new);...

13 13 Topology Inquiry Functions  MPI_Cartdim_get returns the dimension of Cartesian topology  MPI_Cart_coords returns the coordinates of a process of rank  MPI_Cart_rank returns of the rank of a process with coordinate *coords int MPI_Cartdim_get(MPI_Comm comm, int *ndims) int MPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int *coords) int MPI_Cart_rank(MPI_Comm, int *coords, int *rank) MPI_Comm comm_cart; int ndims, rank, *coords;... // create Cartesian topology on comm_cart MPI_Comm_rank(comm_cart, &rank); MPI_Cartdim_get(comm_cart, &ndims); coords = new int[ndims]; MPI_Cart_coords(comm_cart, rank, ndims, coords); // coords contains coord... for(int i=0;i<ndims;i++) coords[i] = 0; MPI_Cart_rank(comm_cart, coords, &rank);


Download ppt "1 Process Groups & Communicators  Communicator is a group of processes that can communicate with one another.  Can create sub-groups of processes, or."

Similar presentations


Ads by Google