GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI-Praxis Kollektive Operationen Oswald Haan
(Alle Dateien im Verzeichnis Uebungen_f/MPI-coll ) Uebungen_py/MPI-coll ) Wie hängt die Dauer der Synchronisation von der Zahl der zu synchronisierenden Prozesse ab? (mit synch.f, synch.py ) synch.fsynch.py Programmieren Sie eine Barriere mit Punkt-zu-Punkt-Kom- munikation und bestimmen Sie deren Dauer: ( synch_s.f, synch_s.py) : synch_s.fsynch_s.py p0 P1 p2 Aufgabe 1: Synchronisation Parallelrechner-Programmierung mit MPI207. –
Aufgabe 2: Daten einsammeln Parallelrechner-Programmierung mit MPI307. – Zusammenführen eines verteilten Vektors zu einem Gesamtvektor mit gather_vec.f, gather_vec.py, gather_obj.py gather_vec.fgather_vec.pygather_obj.py MPI_GATHER( sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, root, comm) comm.Gather(sendbuf,recvbuf,root= 1) recvbuf = comm.gather(sendbuf,root= 1) Task 0 Task 1 (root) Task 2 sendbuf recvbufbuf sendbuf recvbufbuf
Untersuchen Sie das Programm errexit.f, errexit.py errexit.ferrexit.py Ersetzen Sie die Abfolge MPI_REDUCE + MPI_BCAST durch MPI_ALLREDUCE Syntax: MPI_ALLREDUCE( sendbuf, recvbuf, count, datatype, op, comm) recvbuf= comm.reduce(sendobj = sendbuf, recvobj=None, op=op) Aufgabe 3: Reduktion: MPI_MIN Parallelrechner-Programmierung mit MPI407. – A0 op A0 op A0 A1 op A1 op A1 Task 0 Task 1 Task 2 sendbuf recvbufbuf A0 A1 A0 op A0 op A0 A1 op A1 op A1
Erstellen Sie ein Programm zur Bestimmung des globalen Minimums eines verteilten Vektors ganzer Zahlen mit Angabe eines Prozesses, auf dem das Minimum angenommen wird Hinweis: Suche das Minimum des Hilfsvektors hv(i) = intv(i)*np + myid Aufgabe 3: Reduktion: MPI_MIN Parallelrechner-Programmierung mit MPI507. –
Erstellen Sie ein Programm zur Summierung der ganzen Zahlen von 1 bis N. Verwenden Sie dabei MPI_REDUCE mit der Operation MPI_SUM intsum.f, intsum.py intsum.fintsum.py Aufgabe4: Reduktion: MPI_SUM Parallelrechner-Programmierung mit MPI607. –