Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine
320 likes | 438 Vues
Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger. Einführung. Was ist MPI? Was ist PVM? Was ist jPVM? Was ist JPVM?. was ist MPI?. „message passing interface“ weltweiter Standard für „message passing programs“
Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine
E N D
Presentation Transcript
Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger
Einführung • Was ist MPI? • Was ist PVM? • Was ist jPVM? • Was ist JPVM?
was ist MPI? • „message passing interface“ • weltweiter Standard für „message passing programs“ • vereint die Vorteile mehrerer bereits bestehender Systeme
Was ist PVM? • Standard Software für distributed computing • Netzwerk agiert als ein großes System • in C/C++ und Fortran
Was ist jPVM? • in Java geschriebenes Interface zur PVM • bedient sich der native methods capability von Java • Rechner müssen Java und PVM unterstützen
Was ist jPVM? • bestehende PVM-Programme wiederverwendbar
Was ist JPVM? • PVM in Java implementiert • explizites message passing wie in PVM • diverse syntaktische und semantische Veränderungen zur Anpassung an den Java-Programmierstil
Was ist JPVM? • Umstieg von PVM nach JPVM unkompliziert • Verbesserungen durch thread safety, multiple communication end-points (CEP) pro Task, maximale Portabilität
Was ist JPVM? • erschließung bis dato vom Network Parallel Computing ausgeschlossener Architekturen, wie Mac und Windows NT
Arbeitsweise der JPVM • Interface • Erzeugung von Tasks • message passing • Kommunikationsimplementierung • Systemkonfiguration
JPVM: Interface • wichtigste Klasse: jpvmEnviroment • jpvmEnviroment-Objekt entspricht CEP • werden mit Identifikatoren vom Typ jpvmTaskId versehen • Schnittstelle zu den wichtigsten JPVM-Diensten
JPVM: Taskgenerierung • pvm_spawn() • Jeder neue Task erzeugt seine eigene Instanz der JVM. • Verteilung dieser Instanzen auf den Hostpool
JPVM: Taskgenerierung • Jede JVM-Instanz verwaltet ein Task-Objekt (z. B. der Klasse „worker“). • pvm_spawn() gibt die ID des ersten erzeugten jpvmEnviroment-Objekts in einem neuen Task zurück • Beibehaltung der PVM-Signatur
JPVM: Message Passing • pvm_send() und pvm_recv() • Zusammenfassung der Daten in einem jpvmBuffer
JPVM: Message Passing class jpvmBuffer {//ctorpublic jpvmBuffer();//bufferingpublic void pack(int v[], int n, int stride);public void pack(int s);public void pack(float v[], int n, int stride);public void pack(float s); ...//extractingpublic void unpack(int v[], int n, int stride);public int upkint();public void unpack(float v[], int n, int stride);public float upkfloat(); ...};
JPVM: Message Passing • zwei Methodengruppen:Packen und Extrahieren • Überladung => einfacherer Code • Operationen für alle Grundtypen in skalarer Form und Vektorform
JPVM: Message Passing • asynchrones message passing • Sendeparameter: Task-ID und message tag • Empfangsparameter: keine, Task-ID oder message tag, Task-ID und message tag
JPVM: Message Passing • block bis Nachricht empfangen • Rückgabe einer jpvmMessage
JPVM: Message Passing class jpvmMessage {public int messageTag;public jpvmTaskId sourceTid;public jpvmBuffer buffer;};
JPVM: Kommunikation • TCP • ein server socket pro jpvmEnviroment • jpvmTaskId kapselt IP und Port für TCP-Verbindung • thread safety
JPVM: Kommunikation • interne Warteschlange synchronisiert • mehrere Leser und Schreiber gleichzeitig • pvm_recv() fragt Warteschlange ab • pvm_send() synchronized
JPVM: Systemkonfiguration • ein Daemon pro CPU • manuelles Erzeugen von jpvmDaemon-Objekten • Daemons hauptsächlich für Taskgenerierung zuständig
JPVM: Systemkonfiguration • Anmeldung der Daemons über Konsolenprogramm: jpvmConsole • Daemon wartet auf Anfragen von Clients • direkte Antwort auf Anfragen wie Taskstatus und Systeminformationen
JPVM: Systemkonfiguration • Starten eines neuen Threads bei Taskgenerierung=> niedrigere Wartezeiten für andere Anfragen
JPVM: Beispiel import jpvm.*;class example { public static void main(String args[]) { try {jpvmEnvironment jpvm = new jpvmEnvironment();// Spawn N worker tasksjpvmTaskId tids[] = new jpvmTaskId[N];jpvm.pvm_spawn("worker",N,tids);for (int i=0;i<N; i++) { // Farm out workjpvmBuffer buf = new jpvmBuffer(); int work = getWork(i); buf.pack(data); jpvm.pvm_send(buf, tids[i], 123); }for (int i=0;i<N; i++) { // Receive results jpvmMessage message = jpvm.pvm_recv(tids[i]); int result = message.buffer.upkint(); processResult(result); } jpvm.pvm_exit(); } catch (jpvmException jpe) { System.out.println("Error - jpvm exception"); } }};
Folgerungen • JPVM noch nicht „getuned“ • Verbesserungen im Bereich der JITs möglich • JPVM-Anwendungen portabler und viel einfacher zu warten als PVM- oder jPVM-Anwendungen