• Keine Ergebnisse gefunden

Paralleles H¨ochstleistungsrechnen Dr. S. Lang, D. Popovi´c Abgabe: 24. November 2009 in der ¨Ubung

N/A
N/A
Protected

Academic year: 2021

Aktie "Paralleles H¨ochstleistungsrechnen Dr. S. Lang, D. Popovi´c Abgabe: 24. November 2009 in der ¨Ubung"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

IWR, Universit¨at Heidelberg Wintersemester 2009

Aufgabenblatt 5 17. November 2009

Ubungen zur Vorlesung¨

Paralleles H¨ochstleistungsrechnen Dr. S. Lang, D. Popovi´c

Abgabe: 24. November 2009 in der ¨Ubung

Ubung 11¨ Semaphoren Deadlock (3 Punkte)

Betrachten Sie unten stehendes Pseudo-Programm. Erkl¨aren Sie, wie es in der Situation zu einem Deadlock kommen kann. Die Argumente des Konmstruktors initialisieren die Semaphore.

S e m a p h o r e s (1) , t (0) ;

Process Π0 { Process Π1 {

while ( true ) { while ( true ) {

t . wait () ; s . wait () ;

s . wait () ; t . wait () ;

...; ...;

s . signal () ; t . signal () ;

t . signal () ; s . signal () ;

} }

} }

Ubung 12¨ Resourcen-Verwaltung (5 Punkte)

In einem System gebe es zwei identische, belegbare Ressourcen und N Bewerber f¨ur die Belegung einer der beiden Resourcen. Implementieren Sie mit den Threadtools ein Programm auf Basis von Semaphoren, das sicherstellt, dass h¨ochstens zwei Bewerber gleichzeitig die Resourcen belegen k¨onnen.

Die Semaphoren sollen also jedem Bewerber eine Resource zuweisen. Eine m¨ogliche L¨osung ist:

• Ein mitfalseinitialisiertes (globales)boolean-FeldR[2]kennzeichnet die Resourcen-Belegung,

• Bewerber, die Zugang erhalten, setzen eine der beiden Resourcen auftrue(= belegt).

• Eine bin¨are Semaphore sichert den Zugriff auf die Resourcen ab.

• Eine Semaphore, deren Wert 0,1 oder 2 sein kann, realisiert den Zugriff auf die Resourcen.

Sie m¨ussen eine Klasse Consumer vom BasicThread ableiten, welche die Methode run ¨uberl¨adt. Ihr Programm k¨onnte in etwa folgendes Layout haben (nicht vollst¨andig):

boolean R [2]; // R e s o u r c e n

S e m a p h o r e s_res ; // S e m a p h o r e der R e s o u r c e n

S e m a p h o r e s_zgr ; // bin . S e m a p h o r e sichert Zugriff auf R e s o u r c e n ab ...

class Consumer : public B a s i c T h r e a d { void run {

Warte auf R e s o u r c e n;

Sichere Zugriff auf Resource ab ; Waehle freie Resource i ;

E n t s i c h e r e Zugriff ; Arbeite auf Resource i ; Gib Resource i frei ; }

};

(2)

Testen Sie Ihr Programm, z. B. mitN = 22. Ein Beispiel aus dem Leben w¨aren 22 Fussballer die sich nach dem Spiel 2 Duschen teilen m¨ussen ,.

Ubung 13¨ MPI Ring-Test (5 Punkte)

Mit dieser Aufgabe wollen wir die ersten Schritte mit MPI wagen. Implementieren Sie daher einen Ring, in dem Nachrichten versendet werden. Um Verklemmungen zu vermeiden, sollen in einem Schritt zun¨achst alle Prozesse mit geradem Rang und im folgenden Schritt alle mit ungeradem Rang an den nachfolgenden Nachbarn senden. Auf der Homepage finden Sie ein inCgeschriebenes Framework namensmpi_ring.c, das Sie vervollst¨andigen sollen. Darin initialisiert jeder Prozess einen Sendepuffer namensreceive(hier ein Integer) mit beliebigen Daten (hier der Rang). In der Loop wird derreceive -Puffer, der die gesendete Information in der letzen Iteration erhalten haben sollte, in den Sendepuffer kopiert, um die Information an den n¨achsten Prozess zu senden. Diese Kommunikation soll nun von Ihnen in der Loop mitMPI_Ssendand MPI_Recvimplementiert werden. Testen Sie Ihr Programm im Pool oder einem anderen Rechner und ¨uberpr¨ufen Sie, ob alle Nachrichten im Ring in der richtigen Reihenfolge gesendet wurden (Bitte Output mit abgeben).

Genauere Informationen zur Verwendung von MPI im Pool finden auf der Homepage. Wertvoll sind ausserdem die Man-Pages zu MPI (z.B.man MPI_Comm_rank).

Ubung 14¨ Paralleles Berechnen von π mit MPI (7 Punkte) Aus der Identit¨atπ= 4(arctan 1) erh¨alt man durch Ausnutzung der Ableitung des arctan, (arctanx)

= 1/(1 +x2), eine Vorschrift zur Berechnung von π:

π= Z 1

0

4 1 +x2dx.

Durch Teilen des Intervalls inn ¨aquidistante Teilst¨ucke kann das Integral mit der Mittelpunktsregel ausgewertet werden. Das sequentielle Programm finden auf der Homepagepiseq.c. Wir wollen es mit MPI parallelisieren. Die Strategie ist:

• Prozess 0 liest die Anzahl der Teilintervalle ein und teilt sie allen anderen Prozessen mit,

• Die for-Schleife ¨uber die Teilintervalle wird parallelisiert, jeder Prozess berechnet eine lokale Teilsumme. Die Ergebnisse werden von Prozess 0 mit MPI_Reduce eingesammelt und die Teil- summen addiert.

Implementieren Sie die parallele Version des Programms. Vergleichen Sie die Genauigkeit in den Rech- nungen (Nachkommastellen) mit der sequentiellen L¨osung und dem genauen Wert. Bestimmen Sie ausserdem die Konvergenzordnung der Mittelpunktsregel.

Referenzen

ÄHNLICHE DOKUMENTE

(b) Schreiben Sie die for-Schleife so um, dass die Abh¨ angigkeit zwischen den Schleifendurchl¨ aufen vermindert wird (Tipp: In einer Schleife Instruktionen f¨ ur i und

Cube Connected Cycles (CCC) k¨ onnen aus Hypercubes der Dimension d konstruiert werden, indem jeder Knoten des Hypercubes durch einen d-elementigen (inneren) Ring ersetzt wird. Die

er wieder die Kontrolle ¨ uber das Programm erh¨ alt, und der Empf¨ anger die Zeit, die er ben¨ otigt, die Nachricht vollst¨ andig zu empfangen.. Um zuverl¨ assige Werte zu

Wie- derholen Sie einige Simulationen ohne diese Flags (optimiert nur mit O3), und diskutieren Sie die Performance in diesem Fall.. Die Karte im Pool hat theoretisch

(b) Schreiben Sie die for-Schleife so um, dass die Abh¨angigkeit zwischen den Schleifendurchl¨aufen vermindert wird (Tipp: In einer Schleife Instruktionen f¨ ur i und

Cube Connected Cycles (CCC) k¨onnen aus Hypercubes der Dimension d konstruiert werden, indem jeder Knoten des Hypercubes durch einen d-elementigen (inneren) Ring ersetzt wird?. Die

Allge- mein sollen Sie in dieser ¨ Ubung Rechenzeiten ¨ uber der Problemgr¨oße oder der Anzahl der beteiligten Threads messen.. Plotten Sie ein Zeit-m -Diagramm f¨ ur

Diese sollten wie in der Vorlesung angesprochen von der Klasse BasicThread ableiten und m¨ ussen die virtuelle Methode run () ¨ uberladen, in der Erzeuger und Verbaucher ihre