next up previous
Nächste Seite: 1.3.4 Globale Operationen Aufwärts: 1.3 Die Praktikumsaufgaben Vorherige Seite: 1.3.2 Das erste parallele

1.3.3 Blockierende Kommunikation

\fbox {{\large E5}}
Schreibe eine Funktion

Send_ProcD(to,nin,xin,icomm)

welche nin Double-Precision-Zahlen des Feldes xin zum Prozeß  to sendet. Beachte, daß der empfangende Prozeß  to im allgemeinen nicht weiß, wie lang das zu empfangende Datenpacket sein wird.
\fbox {{\large E6}}
Schreibe eine Funktion

Recv_ProcD(from,nout,xout,maxbuf,icomm),

entsprechend zu E5, welche nout Double-Precision-Zahlen in einem Feld xout von Prozeß  from empfängt. Der empfangende Prozeß besitzt keinerlei Information über die Länge des zu empfangenden Datenpackets, daher ist nout ein Ausgabeparameter! maxbuf beinhaltet die maximale Länge des Feldes  xout.
\fbox {{\large E7}}
Teste die Funktionen aus E5 und E6 zuerst mit 2 Prozessen, sodaß Prozeß 1 sendet und Prozeß 0 empfängt. Erweitere den Test mit mehreren Prozessen.
\fbox{{\large E8}}
Kombiniere E5 und E6 zur Funktion

ExchangeD(yourid,nin,xin,nout,xout,maxbuf,icomm),

welche Double-Precision-Zahlen zwischen dem eigenen Prozeß und einem anderen Prozeß  yourid austauscht. Die restlichen Parameter sind die gleichen wie in E5, E6. Teste die Funktion mit 2 und mehr Prozessen.
Was war doch gleich ein Deadlock (S. 36)?

next up previous
Nächste Seite: 1.3.4 Globale Operationen Aufwärts: 1.3 Die Praktikumsaufgaben Vorherige Seite: 1.3.2 Das erste parallele
Gundolf Haase
1999-10-04