MPI: Βαςικζσ Εντολζσ Επικοινωνίασ Κώςτασ Διαμαντάρασ Τμιμα Πλθροφορικισ ΤΕΙ Θεςςαλονίκθσ 2011
Εντολζσ Επικοινωνίασ ςθμείο προσ ςθμείο (point-to-point) MPI_Send, MPI_Recv MPI_Isend, MPI_Irecv 2 Κώςτασ Διαμαντάρασ - ΤΕΙ Θεςςαλονίκησ
MPI_Send MPI_Send(&, 1, MPI_INT, 2, tag, MPI_COMM_WORLD); int ; /* Το δεδομζνο που κα ςταλεί */ int tag; /* Ετικζτα μθνφματοσ */ Πχ. Η ςτζλνει αίτθςθ Send ςτο ςφςτθμα με παραλιπτθ τθν : Αν θ Δ.2 δεν εκτελζςει MPI_Recv() τότε θ Δ.0 μπλοκάρει μπλοκάρω Send Περιμένω MPI_Recv MPI 3 Κώςτασ Διαμαντάρασ - ΤΕΙ Θεςςαλονίκησ
MPI_Recv MPI_Recv (&, 1, MPI_INT, 0, tag, MPI_COMM_WORLD, &status); int ; /* Το δεδομζνο που κα παραλθφκεί */ int tag; /* Ετικζτα μθνφματοσ */ Πχ. Η ςτζλνει αίτθςθ Receive ςτο ςφςτθμα με αποςτολζα τθν : Αν θ Δ.0 δεν εκτελζςει MPI_Send() τότε θ Δ.2 μπλοκάρει μπλοκάρω Περιμένω MPI_Send Recv MPI 4 Κώςτασ Διαμαντάρασ - ΤΕΙ Θεςςαλονίκησ
Επιτυχισ επικοινωνία Δ.0: MPI_Send(&, 1, MPI_INT, 2, tag, MPI_COMM_WORLD); Δ.2: MPI_Recv (&, 1, MPI_INT, 0, tag, MPI_COMM_WORLD, &status); Π.χ. Η ςτζλνει αίτθςθ Send για τθν και θ Δ.2 απαντάει με Receive εκτελείται θ μεταφορά των δεδομζνων. Τα δφο tags πρζπει να ςυμφωνοφν. Send Επιτυχία! Recv MPI 5 Κώςτασ Διαμαντάρασ - ΤΕΙ Θεςςαλονίκησ
MPI_Isend MPI_Isend(&, 1, MPI_INT, 2, tag, MPI_COMM_WORLD, &request); int ; /* Το δεδομζνο που κα ςταλεί */ int tag; /* Ετικζτα μθνφματοσ */ Πχ. Η ςτζλνει αίτθςθ Isend ςτο ςφςτθμα με παραλιπτθ τθν και ςυνεχίηει τθν εκτζλεςι τθσ (δεν μπλοκάρει) ςυνεχίζω Isend Περιμένω MPI_Irecv MPI 6 Κώςτασ Διαμαντάρασ - ΤΕΙ Θεςςαλονίκησ
MPI_Irecv MPI_Irecv (&, 1, MPI_INT, 0, tag, MPI_COMM_WORLD, &request); int ; /* Το δεδομζνο που κα παραλθφκεί */ int tag; /* Ετικζτα μθνφματοσ */ Πχ. Η ςτζλνει αίτθςθ Ireceive ςτο ςφςτθμα με αποςτολζα τθν και ςυνεχίηει τθν εκτζλεςι τθσ. Ελζγχει αργότερα αν το μινυμα ιρκε κοιτάηοντασ το status Περιμένω MPI_Isend Irecv ςυνεχίζω MPI 7 Κώςτασ Διαμαντάρασ - ΤΕΙ Θεςςαλονίκησ
Επιτυχισ επικοινωνία Δ.0: MPI_Isend(&, 1, MPI_INT, 2, tag, MPI_COMM_WORLD, &request); Δ.2: MPI_Irecv (&, 1, MPI_INT, 0, tag, MPI_COMM_WORLD, &request); Π.χ. Η ςτζλνει αίτθςθ Isend για τθν και θ Δ.2 απαντάει με Ireceive εκτελείται θ μεταφορά των δεδομζνων. Τα δφο tags πρζπει να ςυμφωνοφν. Isend Επιτυχία! Irecv MPI 8 Κώςτασ Διαμαντάρασ - ΤΕΙ Θεςςαλονίκησ
Εντολζσ Συλλογικισ Επικοινωνίασ MPI_Bcast, MPI_Scatter, MPI_Gather, MPI_Allgather, MPI_Reduce 9 Κώςτασ Διαμαντάρασ - ΤΕΙ Θεςςαλονίκησ
MPI_Bcast MPI_Bcast(&, 1, MPI_INT, 0, MPI_COMM_WORLD); int ; /*Το δεδομζνο που κα γίνει broadcast */ Πχ. p=3 διεργαςίεσ: Διεργαςία 1 10 Κώςτασ Διαμαντάρασ - ΤΕΙ Θεςςαλονίκησ
MPI_Scatter MPI_Scatter(local_, n, MPI_INT, glob_, n, MPI_INT, 0, MPI_COMM_WORLD); int glob_[n]; /* N>=n*p, p=πλικοσ διεργαςιών */ int local_[n]; Πχ. p=3: local_ glob_ Διεργαςία 1 Άδειο Άδειο local_ glob_ local_ glob_ 11 Κώςτασ Διαμαντάρασ - ΤΕΙ Θεςςαλονίκησ
MPI_Gather MPI_Gather(local_, n, MPI_INT, glob_, n, MPI_INT, 0, MPI_COMM_WORLD); int local_[n]; int glob_[n]; /* N>=n*p, p=πλικοσ διεργαςιών */ Πχ. p=3: local_ glob_ Διεργαςία 1 Άδειο Άδειο local_ glob_ local_ glob_ 12 Κώςτασ Διαμαντάρασ - ΤΕΙ Θεςςαλονίκησ
MPI_Allgather MPI_Allgather(local_, n, MPI_INT, glob_, n, MPI_INT, MPI_COMM_WORLD); int local_[n]; int glob_[n]; /* N>=n*p, p=πλικοσ διεργαςιών */ Πχ. p=3: local_ glob_ Διεργαςία 1 local_ glob_ local_ glob_ 13 Κώςτασ Διαμαντάρασ - ΤΕΙ Θεςςαλονίκησ
MPI_Reduce MPI_Reduce(&local_, &glob_, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); int local_; int glob_; Πχ. p=3: local_ glob_ Διεργαςία 1 Άδειο + Άδειο local_ glob_ local_ glob_ 14 Κώςτασ Διαμαντάρασ - ΤΕΙ Θεςςαλονίκησ