1 / 11

Parallel Virtual Machine (PVM) Überblick

Parallel Virtual Machine (PVM) Überblick. PVM unterstützt: verteilungstransparente Programmierung Kommunikation durch Nachrichten einfache Lastverteilung dynamische Integration/Ausschluss von Rechnern

Download Presentation

Parallel Virtual Machine (PVM) Überblick

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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),ABERhier Einsatz einer speziellen Java-Version.

  2. PVM-Installation • Gesamtpaket/Bibliotheken liegen unterhttp://www.inf.fu-berlin.de/lehre/WS99/VS/(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 hi > java jpvm.jpvmDaemon jpvm daemon: hi, port #pi # 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 : hi Port number : pi # Testen, ob alle angemeldet sind jpvm> ps h1, 0 tasks: ... Local, 1 tasks: jpvm Console

  4. PVMProgrammstart 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-KonsoleAktive 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 mittelsclass jpvmBuffer { public jpvmBuffer(); // generiert leere Instanz // Füllmethode für (fast) jeden Datentyp <t> public void pack(<t> val); public void pack(<t> vs[],int n,int stride); //Zugriffsmethode für skalare Datentypen <t> public <t> upk<t>(); public void unpack(<t> vals[],int n,int stride););jpvmBuffer dürfen nach dem Senden nicht mehr manipuliert werden! • Entgegennahme von Nachrichten mittelsclass 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 Systemvoid 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 t1 sollte eine sequentielle Programmversion gemessen werden. • Amdahls Gesetz: Lineare Beschleunigung S Übliche Beschleunigung n

  11. GnuPlot in 5 Minuten # n t(ms) 1 100 2 60 3 45 4 40 5 37 • 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>

More Related