High-Performance Bildverarbeitung (nicht nur) mit JAVA 1
High-Performance Bildverarbeitung (nicht nur) mit JAVA Fragen: wie kann ein typisches BV-Unternehmen wirtschaftlich an der aktuellen Hardwareentwicklung teilhaben wie kann aktuelle Hardware sinnvoll genutzt werden Kein Thema: Supercomputing, Gridcomputing, Cloudcomputing 2
Übersicht Aktuelle Hardwareentwicklung BV mit intelligenten Kameras und PC Parallele BV mit JAVA und ImageJ Verteilte BV mit JAVA/RMI BV auf Grafikkarten (BV auf mobilen Endgeräten) Zusammenfassung 3
Aktuelle Hardwareentwicklung Moore'sches Gesetz (Gordon Moore, Gründer von INTEL, 1965): Verdopplung der Transistoren auf einem Chip alle 18 Monate Gültig bis heute für CPUs Grafikprozessoren Speicher 4
Aktuelle Hardwareentwicklung Beispiele: Intel 486, 1 Million Instruktionen/s, 225 $, 1991 Intel Pentium 4, 3 GHz, 9075 MIPS, 400 $, 2004 Intel Core2Duo, 22000 MIPS, 325 $, 2007, d.h 1.6 Cent / MIPS 5
Aktuelle Hardwareentwicklung Nvidia GV-N295 1792 MB, 896bit, 2 x 240 Unified Shader @ 1.242 MHz, 450.- Sony W960i 8GB, Touchscreen, 3 Megapixel, Java, WLAN, Strichcode- und DataMatrixbearbeitung, Visitenkartenscanner, 220.- 6
Aktuelle Hardwareentwicklung Bandbreiten aktueller Bus- und Netzwerktechnologien : Hauptspeicher: > 1000 MByte/s GBit Ethernet: 11 MByte/s WLAN: 54 MBit/s, 30 bis 100 m Infrarot: 16 MBit/s, bis 5 m Bluetooth: 1-3 MBit/s, 10 bis 200 m 7
Aktuelle Hardwareentwicklung Beispiel Google (Börsengang 2004): 719 Racks mit 63 272 Rechnern 126 544 CPUs 253 Terahertz Ersatz-Taktfrequenz 127 Terabyte RAM 5 Petabyte Festplattenspeicher ca. 10 Milliarden CPU-Zyklen pro Anfrage Speicherung und Indizierung des gesamten WWW 8
Aktuelle Hardwareentwicklung Szenarien zur Teilhabe an der Entwicklung: Intelligente Kamera und PC 1 Multicore CPU Viele Multicore PCs (Grid- oder Cloud-Computing) Multicore CPU und Grafikkarte Mobiles Endgerät und??? IMMER notwendig: Kommunikation Multithreading 9
Aktuelle Hardwareentwicklung Frage: Wie kann ein typisches Bildverarbeitungsunternehmen wirtschaftlich an dieser Entwicklung teilhaben? Kriterien: Funktionalität, Stabilität, Hardwarekosten, Lizenzkosten, Einarbeitungszeit, Entwicklungszeit, langfristige Verfügbarkeit, Komplexität, Dokumentierbarkeit etc. 10
BV mit mobilen Kameras und PC Konzept: BV auf Kamera (z.b. in C ) Bedienung auf PC (Menügenerator, evtl. Touchsceen, Pentiumklon 200 MHz, 256 MB) Kommunikation über TCP/IP (Sockets) Klarschriftlesung Barcode Flächencode etc. Standardprotokoll (VDMAXML) 11
BV mit mobilen Kameras und PC Eine mögliche Lösung: 12
BV mit mobilen Kameras und PC 13
BV mit mobilen Kameras und PC 14
BV mit mobilen Kameras und PC JAVA bietet Multithreading Hardwareunabhängigkeit (Windows, Linux, mobile Geräte), ( write once, run everywhere ) Netzwerktransparenz (auch in heterogenen Umgebungen) Nachweislich vergl. geringe Entwicklungszeiten Performance (OpenGL, DirectX, Hot-Spot-JIT-Compiler) Freie Verfügbarkeit Umfassende Funktionalität (APIs für fast alles) Dokumentierbarkeit Stabilität Sehr gute, freie Entwicklungsumgebungen (Eclipse, Netbeans) 15
BV mit mobilen Kameras und PC Kommunikation: Consumer Producer Entwurfsmuster Producer schreibt Daten in Puffer Consumer liest Daten aus Puffer Kommunikation über SharedMemory, Synchronisation notwendig Normalerweise komplex 16
BV mit mobilen Kameras und PC Lösung mit JAVA (Concurrent-Klassenbibliothek): Typ BlockingQueue, Methoden put und take Thread 1: put Thread 2: take Synchronisation: automatisch Entwicklungszeiten Menügenerator und Implementierung des XMLProtokolls: 12 Tage Dokumentation: 1 Tag (javadoc, html) Nacharbeiten: 1 Tag 17
BV mit mobilen Kameras und PC Fazit: JAVA ist in diesem Szenario sehr gut geeignet Kurze Entwicklungszeiten Stabilität Qualität Dokumentierbarkeit zu gewährleisten. 18
Parallele BV mit ImageJ und JAVA Aufgabe: BV-Operationen parallelisieren Lösung: Teile Bild(er) in mehrere Bereiche (Kacheln, engl. Tiles) Jede Kachel wird von einem Thread bearbeitet Jeder Thread läuft auf einem eigenen Prozessorkern 19
Parallele BV mit ImageJ und JAVA ImageJ Entwicklung des US National Institute of Health (NIH) 100 % JAVA OpenSource, kommerziell anwendbar Werkzeuge zum Erzeugen, Visualisieren, Verarbeiten, Analysieren, Öffnen und Speichern von Bildern Einfacher Plugin-Mechanismus Markosprache Servermodus 20
Parallele BV mit ImageJ und JAVA Plugin-Konzept 21
Parallele BV mit ImageJ und JAVA Beispiel Aus: Burger, Burge Digitale Bildverarbeitung 22
Parallele BV mit ImageJ und JAVA Aus: Bengel et. al.: Masterkurs parallele und verteilte Systeme; Vieweg, 2008 23
Parallele BV mit ImageJ und JAVA XY-Gradient Invertierung Core2Duo T7500 Core2Duo T7500 1,2 1,6 1,4 0,8 Rechenzeit 0,6 Speedup 0,4 0,2 t in s / Speedupfaktor t in s / Speedupfaktor 1 1,2 1 Rechenzeit 0,8 Speedup 0,6 0,4 0,2 0 0 1 2 3 Threads 4 1 2 3 4 Threads 24
Median 7er Kernel Median 21er Kernel Core2Duo T7500 Core2Duo T7500 1,8 18 1,6 16 1,4 14 1,2 Rechenzeit 1 Speedup 0,8 0,6 0,4 0,2 t in s / Speedupfaktor t in s / Speedupfaktor Parallele BV mit ImageJ und JAVA 12 Rechenzeit 10 Speedup 8 6 4 2 0 0 1 2 3 Threads 4 1 2 3 4 Threads 25
Parallele BV mit ImageJ und JAVA XY-Gradient Invertieren Core2Quad, Q9450, 2,66 GHz Core2Quad, Q9450, 2,66 GHz 2,5 1,2 2 0,8 Rechenzeit 0,6 Speedup 0,4 0,2 0 t in s / Speedupfaktor t in s / Speedupfaktor 1 1,5 Rechenzeit Speedup 1 0,5 0 1 2 3 Threads 4 1 2 3 4 Threads 26
Parallele BV mit ImageJ und JAVA Median 21er Kernel Core2Quad, Q9450, 2,66 GHz 14 t in s / Speedupfaktor 12 10 8 Rechenzeit Speedup 6 4 2 0 1 2 3 4 Threads 27
Parallele BV mit ImageJ und JAVA 28
Parallele BV mit ImageJ und JAVA Fazit: Multithreading ist einfach zu handhaben Speedup hängt von der Komplexität der Anforderung ab 2-Kern Prozessoren können effizient benutzt werden 4-Kern Prozessoren: neuere Modelle testen 29
Verteilte BV (mit JAVA/RMI) Aufgabe: Bearbeite sehr große Bilder oder Bildsequenzen Lösung: Barbeite Kacheln oder ganze Bilder im Netzwerk Umsetzung: JAVA RMI - Bibliothek 30
Verteilte BV (mit JAVA/RMI) Vorgehensweise analog zu Multicoreprogramming Bild evtl. kacheln Bild oder Teilbild an andere Rechner senden Operationen auf allen Rechnern gleichzeitig ausführen Ergebnisbilder zurücksenden Wurde getestet und funktioniert Programmieraufwand: überschaubar 31
Einschub: BV mit JAVA/C++ JNI (Java Native Interface): Schnittstelle zu anderen Programmiersprachen Aus: Irzinger et. al.: Projektdokumentation, WS2007 32
BV auf Grafikkarten 33
BV auf Grafikkarten 34
BV auf Grafikkarten 35
BV auf Grafikkarten 36
BV auf Grafikkarten 37
BV auf Grafikkarten 38
BV auf Grafikkarten 39
BV auf Grafikkarten 40
BV auf Grafikkarten 41
BV auf Grafikkarten 42
BV auf Grafikkarten 43
BV auf Grafikkarten 44
BV auf Grafikkarten 45
BV auf Grafikkarten 46
BV auf Grafikkarten 47
BV auf Grafikkarten 48
BV auf Grafikkarten 49
BV auf Grafikkarten Ergebnis: Aus: Gilner et.al., Projektdokumentation, WS2008 SingleCore mit 2,7 GHz gegen GeForece 8400: 27:1 50
BV auf Grafikkarten Fazit: GPU ist deutlich schneller Nichtoptimierte Verwendung ist einfach Programmiermodell ist zukunftssicher (Speicher-)Optimierung ist sehr komplex Cuda wird verwendet 51
BV auf Grafikkarten 52
Zusammenfassung High-Performance BV auf aktueller Hardware bedeutet Verwendung von: Mobilen Geräten Intelligenten Kameras Multicore Prozessoren Multicore Prozessoren im Netzwerk Grafikkarten zur Berechnung von BV-Operationen Alle Szenarien sind verstanden, anwendbar und werden in der Lehre berücksichtigt Projekte WS2007, WS2008, SS2009, WS2009,... LV: CAIP 3, BV mit JAVA, Algorithmen in C++ 53
Zusammenfassung Danke an: Pharmacontrol Electronic GmbH, Zwingenberg BASF SE, Ludwigshafen OBV- Studierende: Belitz, Gillner, Irzinger, Mengler, Nau, Ostojic u.a. Hr. Friehl, Hr. Häberle Alle Kollegen für die Unterstützung und dem Dekanat/FB und der Hochschulleitung für die Genehmigung des FS 54