Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Parallel Virtual Machine (PVM) Überblick PVM unterstützt: –verteilungstransparente Programmierung –Kommunikation durch Nachrichten –einfache Lastverteilung.

Ähnliche Präsentationen


Präsentation zum Thema: "Parallel Virtual Machine (PVM) Überblick PVM unterstützt: –verteilungstransparente Programmierung –Kommunikation durch Nachrichten –einfache Lastverteilung."—  Präsentation transkript:

1 Parallel Virtual Machine (PVM) Überblick PVM unterstützt: –verteilungstransparente Programmierung –Kommunikation durch Nachrichten –einfache Lastverteilung –dynamische Integration/Ausschluss von Rechnern PVM unterstützt heterogene Applikationen (bzgl. Programmiersprache, Rechnerarchitektur), ABER hier Einsatz einer speziellen Java-Version.

2 PVM-Installation Gesamtpaket/Bibliotheken liegen unter (Aufgaben  Material) jpvm.jar und die Applikationsklassen müssen im CLASSPATH liegen, d.h. die Variable CLASSPATH muss richtig gesetzt sein (Kommandozeilenparameter reicht nicht).

3 PVM-Initialisierung # Starten eines Dämons auf allen Rechnern h i > java jpvm.jpvmDaemon jpvm daemon: h i, port #p i # Starten der Console+Dämon auf lokalem Rechner > java jpvm.jpvmConsole jpvm> # Jeden entfernten Rechner eintragen (für alle i  lokal) jpvm> add Host name: h i Port number: p i # Testen, ob alle angemeldet sind jpvm> ps h 1, 0 tasks:... Local, 1 tasks: jpvm Console

4 PVM Programmstart etc. Start von PVM-Applikationen wie Java- Applikationen auf beliebigem Rechner mit Dämonen (Adresse in lokalem File, z.B. /tmp/jpvmd.USER, c:\Temp\jpvmd-USER.txt) Herunterfahren des Gesamtsystems mit dem Befehl halt auf der PVM-Konsole Aktive PVM-Applikationen werden nicht beendet! Bei Problemen mit dem Hochfahren von PVM alle alten Referenzdateien löschen.

5 JPVM-Basisklassen JPVM-Task  Instanz von jpvmEnvironment JPVM-Task hat eindeutigen Namen jpvmTaskId Aufsetzen von Nachrichten mittels class jpvmBuffer { public jpvmBuffer(); // generiert leere Instanz // Füllmethode für (fast) jeden Datentyp public void pack( val); public void pack( vs[],int n,int stride); //Zugriffsmethode für skalare Datentypen public upk (); public void unpack( vals[],int n,int stride);); jpvmBuffer dürfen nach dem Senden nicht mehr manipuliert werden! Entgegennahme von Nachrichten mittels class jpvmMessage { public int messagetag; //zur Klassifizierung public jpvmTaskId sourceTid; // Quelle public jpvmBuffer buffer; // Inhalt }

6 JPVM - Senden und Empfangen class jpvmEnvironment { // Senden von Nachrichten // an einzelne JPVM-Tasks public void pvm_send(jpvmBuffer buf, // was jpvmTaskId tid, // wohin int tag); // Nachrichtenart // an mehrere JPVM-Tasks public void pvm_mcast(jpvmBuffer bug,jpvmTaskID tids[], int ntids, int tag); // Empfangen von Nachrichten public jpvmMessage pvm_recv(); // blockierend public jpvmMessage pvm_nrecv(); // nichtblockierend public boolean pvm_probe();// Test, ob Nachricht da ist }

7 JPVM-Erzeugen neuer Tasks Methode in jpvmEnvironment : int pvm_spawn(String cls, //Name der Java-Klasse int num, // Anzahl der neuen Tasks jpvmTaskId tids[]// Container für ); // die neuen TaskIDs –Erzeugung von num JVM –Aufruf von cls.main({}) in jeder JVM –Anzahl erzeugter Tasks als Rückgabe (-1  Fehler)  Zeit- und speicheraufwendiges Starten paralleler verteilter Tasks Kontaktaufnahme zum PVM-System durch Instanziierung von jpvmEnvironment Neue Tasks haben keine Standard Ein-/Ausgabe. (Debugging mit Files, flush() nicht vergessen).

8 JPVM-Was noch fehlt... Eigene TaskId: jpvmTaskId pvm_mytid() falls Erzeugung mit spawn, TaskID des Vaters jpvmTaskId pvm_parent() Abmelden beim JPVM System void pvm_exit(); Möglicher Programmieransatz SPMD (Single Program Multiple Data) –jede verteilte, parallele Komponente benutzt das gleiche Programm (die gleiche Java-Klasse) –die Ausführung ist abhängig von internen Daten (z.B. „Wurde ich mit spawn erzeugt oder direkt vom Nutzer?“)

9 JPVM- Ein einfaches Beispiel import jpvm.*; public class Hello { public static void main(String args[]) { // connect to JPVM jpvmEnvironment jpvm = new jpvmEnvironment(); if (jpvm.pvm_parent() == null) { // I‘m the master, create servants... jpvmTaskId servants = new jpvmTaskId[5]; int res = jpvm.pvm_spawn(“Hello“,5, servants);} else { // I‘m the servant.. out = new FileWriter(jpvm.mytid.toString()); out.write(“I‘m alive...“); } jpvm.exit(); // finished }

10 Bewertung von parallelen Applikationen Beschleunigung (Speedup): Effizienz (Efficiency): Für t 1 sollte eine sequentielle Programmversion gemessen werden. Amdahls Gesetz: Lineare Beschleunigung Übliche Beschleunigung S n

11 GnuPlot in 5 Minuten # n t(ms) Zweidimensionale Messdaten in einem File plot.dat Starten von GnuPlot: Hostname> gnuplot gnuplot> plot “plot.dat“ title “Aufgabe2“ gnuplot> set output “plot.eps“ gnuplot> set terminal postscript eps gnuplot> replot gnuplot> quit Hostname>


Herunterladen ppt "Parallel Virtual Machine (PVM) Überblick PVM unterstützt: –verteilungstransparente Programmierung –Kommunikation durch Nachrichten –einfache Lastverteilung."

Ähnliche Präsentationen


Google-Anzeigen