Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine...

32
Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger

Transcript of Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine...

Page 1: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

Hauptseminar 2001 „Parallele Programmierung in Java“

- JPVM-Java Parallel Virtual Machine

Referent: Sebastian Steininger

Page 2: 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?

Page 3: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

was ist MPI?

„message passing interface“

weltweiter Standard für „message passing programs“

vereint die Vorteile mehrerer bereits bestehender Systeme

Page 4: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

Was ist PVM?

Standard Software für distributed computing

Netzwerk agiert als ein großes System

in C/C++ und Fortran

Page 5: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

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

Page 6: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

Was ist jPVM?

bestehende PVM-Programme wiederverwendbar

Page 7: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

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

Page 8: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

Was ist JPVM?

Umstieg von PVM nach JPVM unkompliziert

Verbesserungen durch thread safety, multiple communication end-points (CEP) pro Task, maximale Portabilität

Page 9: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

Was ist JPVM?

erschließung bis dato vom Network Parallel Computing ausgeschlossener Architekturen, wie Mac und Windows NT

Page 10: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

Arbeitsweise der JPVM

Interface

Erzeugung von Tasks

message passing

Kommunikationsimplementierung

Systemkonfiguration

Page 11: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

JPVM: Interface

wichtigste Klasse: jpvmEnviroment

jpvmEnviroment-Objekt entspricht CEP

werden mit Identifikatoren vom Typ jpvmTaskId versehen

Schnittstelle zu den wichtigsten JPVM-Diensten

Page 12: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

JPVM: Interfaceclass jpvmEnvironment {

public jpvmEnvironment(); // Constructor registers task with the JPVM systempublic void pvm_exit();

// Identity:public jpvmTaskId pvm_mytid();public jpvmTaskId pvm_parent();

// Task creation:public int pvm_spawn(String task_name, int num, jpvmTaskId tids[]);

// Send messages:public void pvm_send(jpvmBuffer buf, jpvmTaskId tid, int tag);public void pvm_mcast(jpvmBuffer buf, jpvmTaskId tids[], int ntids, int tag);

// Receive messages, blocking (non-blocking versions not depicted):public jpvmMessage pvm_recv(jpvmTaskId tid, int tag);public jpvmMessage pvm_recv(jpvmTaskId tid);public jpvmMessage pvm_recv(int tag);public jpvmMessage pvm_recv();

//Probe for message availability:public boolean pvm_probe(jpvmTaskId tid, int tag);public boolean pvm_probe(jpvmTaskId tid);public boolean pvm_probe(int tag);public boolean pvm_probe();

// System configuration and control:public jpvmConfiguration pvm_config();public jpvmTaskStatus pvm_tasks(jpvmConfiguration conf, int which);public void pvm_halt();

};

Page 13: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

JPVM: Taskgenerierung

pvm_spawn()

Jeder neue Task erzeugt seine eigene Instanz der JVM.

Verteilung dieser Instanzen auf den Hostpool

Page 14: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

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

Page 15: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

JPVM: Message Passing

pvm_send() und pvm_recv()

Zusammenfassung der Daten in einem jpvmBuffer

Page 16: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

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(); ...};

Page 17: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

JPVM: Message Passing

zwei Methodengruppen:Packen und Extrahieren

Überladung => einfacherer Code

Operationen für alle Grundtypen in skalarer Form und Vektorform

Page 18: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

JPVM: Message Passing

asynchrones message passing

Sendeparameter: Task-ID und message tag

Empfangsparameter: keine, Task-ID oder message tag, Task-ID und message tag

Page 19: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

JPVM: Message Passing

block bis Nachricht empfangen

Rückgabe einer jpvmMessage

Page 20: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

JPVM: Message Passing

class jpvmMessage {

public int messageTag;public jpvmTaskId sourceTid;public jpvmBuffer buffer;

};

Page 21: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

JPVM: Kommunikation

TCP

ein server socket pro jpvmEnviroment

jpvmTaskId kapselt IP und Port für TCP-Verbindung

thread safety

Page 22: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

JPVM: Kommunikation

Page 23: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

JPVM: Kommunikation

interne Warteschlange synchronisiert

mehrere Leser und Schreiber gleichzeitig

pvm_recv() fragt Warteschlange ab

pvm_send() synchronized

Page 24: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

JPVM: Systemkonfiguration

ein Daemon pro CPU

manuelles Erzeugen von jpvmDaemon-Objekten

Daemons hauptsächlich für Taskgenerierung zuständig

Page 25: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

JPVM: Systemkonfiguration

Anmeldung der Daemons über Konsolenprogramm: jpvmConsole

Daemon wartet auf Anfragen von Clients

direkte Antwort auf Anfragen wie Taskstatus und Systeminformationen

Page 26: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

JPVM: Systemkonfiguration

Starten eines neuen Threads bei Taskgenerierung=> niedrigere Wartezeiten für andere Anfragen

Page 27: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

JPVM: Beispielimport jpvm.*;class example { public static void main(String args[]) { try { jpvmEnvironment jpvm = new jpvmEnvironment();// Spawn N worker tasks jpvmTaskId tids[] = new jpvmTaskId[N]; jpvm.pvm_spawn("worker",N,tids); for (int i=0;i<N; i++) { // Farm out work jpvmBuffer 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"); } }};

Page 28: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

JPVM: Performance

Page 29: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

JPVM: Performance

Page 30: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

JPVM/jPVM/PVM: Performancevergleich

Page 31: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

JPVM/jPVM/PVM: Performancevergleich

Page 32: Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.

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