Star Trek 11: Star Trek 11: Unendliche Weiten Unendliche Weiten Wissenschafliche Software Wissenschafliche Software mit .NET mit .NET Bernd Marquardt Bernd Marquardt Microsoft C++ MVP Microsoft C++ MVP Microsoft Regional Director Microsoft Regional Director Germany Germany Software+Consulting Software+Consulting [email protected][email protected]http://www.go-sky.de http://www.go-sky.de
53
Embed
Star Trek 11: Unendliche Weiten Wissenschafliche Software mit.NET Bernd Marquardt Microsoft C++ MVP Microsoft Regional Director Germany Software+Consulting.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Star Trek 11: Unendliche Star Trek 11: Unendliche WeitenWeitenWissenschafliche Software mit Wissenschafliche Software mit .NET.NETBernd MarquardtBernd MarquardtMicrosoft C++ MVPMicrosoft C++ MVPMicrosoft Regional Director GermanyMicrosoft Regional Director GermanySoftware+ConsultingSoftware+Consultingberndm@[email protected]://www.go-sky.dehttp://www.go-sky.de
Ein Beispiel: FFTEin Beispiel: FFT Die unendlichen Weiten…Die unendlichen Weiten…
CCD-Kameras und BilderCCD-Kameras und Bilder Bildbearbeitung, Pixel-Verfahren mit C#Bildbearbeitung, Pixel-Verfahren mit C# SpektroskopieSpektroskopie
Gauss-Fit von Peaks in einem Gauss-Fit von Peaks in einem SpektrumSpektrum
Performance und MT (I/O, OpenMP)Performance und MT (I/O, OpenMP) ZusammenfassungZusammenfassung
EinführungEinführung
.NET war neu (vor einigen Jahren).NET war neu (vor einigen Jahren) Version 1.0, 1.1, 2.0 vom FrameworkVersion 1.0, 1.1, 2.0 vom Framework Es sollte mittlerweile ganz gut Es sollte mittlerweile ganz gut
funktionierenfunktionieren Wie steht es mit der Performance Wie steht es mit der Performance
von .NET?von .NET? Mathematische Funktionen Mathematische Funktionen
System.MathSystem.Math Rechengenauigkeit Rechengenauigkeit IEEE 754 IEEE 754 Grafik (2D, 3D) unter Windows Grafik (2D, 3D) unter Windows
RechengenauigkeitRechengenauigkeit Float: 32 bitFloat: 32 bit
Ca. 7 signifikante StellenCa. 7 signifikante Stellen -3.402823 x 10-3.402823 x 103838 bis +3.402823 x 10 bis +3.402823 x 103838
Double: 64 bitDouble: 64 bit Ca. 15 signifikante StellenCa. 15 signifikante Stellen -1.79769313486232 x 10-1.79769313486232 x 10308308 bis bis
+1.79769313486232 x 10+1.79769313486232 x 10308308 Decimal: 128 bitDecimal: 128 bit
--79,228,162,514,264,337,593,543,950,379,228,162,514,264,337,593,543,950,335 bis 35 bis +79,228,162,514,264,337,593,543,950,+79,228,162,514,264,337,593,543,950,335 335
RechengenauigkeitRechengenauigkeit
Decimal-Typ ist eher für Finanz-Decimal-Typ ist eher für Finanz-Rechnungen mit großen Zahlen Rechnungen mit großen Zahlen erforderlicherforderlich
Genauigkeit ist über einen Genauigkeit ist über einen bestimmten Wertebereich sehr gutbestimmten Wertebereich sehr gut
Bei vielen (mehr als 5) String-Bei vielen (mehr als 5) String-Operationen Operationen StringBuilderStringBuilder benutzenbenutzen Umwandlung in string kostet nichtsUmwandlung in string kostet nichts
StringBuilderStringBuilder-Klasse enthält -Klasse enthält wichtige Methodenwichtige Methoden Konvertieren nicht immer erforderlichKonvertieren nicht immer erforderlich Z.B.: Z.B.: ReplaceReplace
Generics – oder doch Generics – oder doch nicht?nicht? Früher: Alles mit CollectionsFrüher: Alles mit Collections Generics können ihre Daten im Generics können ihre Daten im
„richtigen“ Typ speichern„richtigen“ Typ speichern Kein Boxing und Unboxing nötig Kein Boxing und Unboxing nötig
((System.ObjectSystem.Object)) Das bringt Performance-Gewinne…Das bringt Performance-Gewinne…
……und Typsicherheitund Typsicherheit
Performance: AllgemeinPerformance: Allgemein
Runtime und JIT-Compiler sind für alle Runtime und JIT-Compiler sind für alle Sprachen gleichSprachen gleich
Performance-Unterschiede können nur Performance-Unterschiede können nur aus den sprach-eigenen Compilern aus den sprach-eigenen Compilern entstehenentstehen
AnalysemöglichkeitenAnalysemöglichkeiten 1. Möglichkeit: Analyse des IL-Codes mit 1. Möglichkeit: Analyse des IL-Codes mit
dem Tool dem Tool ILDASMILDASM 2. Möglichkeit: Analyse des vom JIT-2. Möglichkeit: Analyse des vom JIT-
Compiler erzeugten Maschinencodes mit Compiler erzeugten Maschinencodes mit DebugBreak();DebugBreak();
IL-Code-UnterschiedeIL-Code-Unterschiede
ldc.i4.0
stloc.0
br.s IL_000e
ldloc.0
ldc.i4.1
add
stloc.0
ldloc.0
ldc.i4.s 100
blt.s IL_0006
ldc.i4.0
stloc.0
...
ldloc.0
ldc.i4.1
add.ovf
stloc.0
ldloc.0
ldc.i4.s 99
ble.s IL_0004
VB .NETVB .NETC#C#
Arithmetik (einfach!)Arithmetik (einfach!) ((double) i + (double) j) * 2.5((double) i + (double) j) * 2.5
Allgemeine Ergebnisse:Allgemeine Ergebnisse: Mathematische Algorithmen sind Mathematische Algorithmen sind
sehr schnell – Rechenoperationen sehr schnell – Rechenoperationen ohne Einschränkungenohne Einschränkungen
Arithmetik (esotherisch!)Arithmetik (esotherisch!) Fast Fourier TransformationFast Fourier Transformation
Sägezahn aus 1.048.576 Sägezahn aus 1.048.576 EinzelwertenEinzelwerten
Daten-Array auf dem Heap (mit Daten-Array auf dem Heap (mit VC.NET unter Kontrolle des Garbage VC.NET unter Kontrolle des Garbage Collectors)Collectors)
Allgemeine Ergebnisse:Allgemeine Ergebnisse: Auch mit GC sind schnelle Auch mit GC sind schnelle
Berechnungen möglichBerechnungen möglich
ArithmetikArithmetik
Je komplexer die Berechnungen, Je komplexer die Berechnungen, desto geringer werden die desto geringer werden die Unterschiede bei den CLR-SprachenUnterschiede bei den CLR-Sprachen
Allgemeines Ergebnis:Allgemeines Ergebnis: Es wurde kein Testbeispiel gefunden, Es wurde kein Testbeispiel gefunden,
bei dem die CLR-Zeiten abnormal bei dem die CLR-Zeiten abnormal langsam warenlangsam waren
Bei allen Testbeispielen waren die Bei allen Testbeispielen waren die CLR-Zeiten immer wesentlich besser, CLR-Zeiten immer wesentlich besser, als die Zeiten von VB 6als die Zeiten von VB 6
for-Schleifen mit wenigen for-Schleifen mit wenigen DurchgängenDurchgängen JIT macht Loop-UnrollingJIT macht Loop-Unrolling
for(i = 5; i < 5; i++)for(i = 5; i < 5; i++) JIT beachtet die Schleife nichtJIT beachtet die Schleife nicht
d += 3 + a – a;d += 3 + a – a; JIT erzeugt keinen Code für „+ a - a“JIT erzeugt keinen Code für „+ a - a“
........
……jetzt kommt die jetzt kommt die UnendlichkeitUnendlichkeit Hobby: Astronomie und AstrophysikHobby: Astronomie und Astrophysik Man fängt an…Man fängt an…
……einfach mit gucken…einfach mit gucken… ……dann fotografieren…dann fotografieren… ……dann messen…dann messen… ……dann auswerten…dann auswerten… ……
Nachteile:Nachteile: UnempfindlichUnempfindlich Scharfstellung schwierigScharfstellung schwierig Objektpositionierung schwierigObjektpositionierung schwierig Nicht linearNicht linear
Vorteile:Vorteile: Großes FormatGroßes Format Kein Notebook erforderlichKein Notebook erforderlich Kein StrombedarfKein Strombedarf Farbbild: Einmal belichtenFarbbild: Einmal belichten
CCD-TechnologieCCD-Technologie
Heute: CCD-KamerasHeute: CCD-Kameras Chips werden jetzt immer größer Chips werden jetzt immer größer
(Kleinbildformat)(Kleinbildformat) Höchste QuanteneffizienzHöchste Quanteneffizienz Man sieht sofort, was man bekommtMan sieht sofort, was man bekommt Es gibt auch schon Farb-CCD‘sEs gibt auch schon Farb-CCD‘s Auflösung ist sehr hochAuflösung ist sehr hoch Wichtig: Wenn man eine „gute“ Kamera Wichtig: Wenn man eine „gute“ Kamera
hat, braucht man auch ein „gutes“ hat, braucht man auch ein „gutes“ NotebookNotebook
Bild-AufnahmeBild-Aufnahme
CCD-Kamera wird gekühltCCD-Kamera wird gekühlt Flat-BildFlat-Bild DunkelbildDunkelbild Mehrere RohbilderMehrere Rohbilder Final-Bild = (Rohbild – Dunkelbild) / Final-Bild = (Rohbild – Dunkelbild) /
Flat-BildFlat-Bild Alle Final-Bilder addierenAlle Final-Bilder addieren Kontrast- und HelligkeitsverstärkungKontrast- und Helligkeitsverstärkung
BildbearbeitungBildbearbeitung
Es gibt CCD-Chip mit über 10 Es gibt CCD-Chip mit über 10 Millionen Pixel!!!Millionen Pixel!!!
Alle Bildoperationen dauern Alle Bildoperationen dauern entsprechend langeentsprechend lange
Anzahl der Pixel ist ebenfalls kritisch Anzahl der Pixel ist ebenfalls kritisch bei allen bei allen BildbearbeitungsoperationenBildbearbeitungsoperationen Kontrast und Helligkeit ändernKontrast und Helligkeit ändern Bild schärfenBild schärfen Bild weichzeichnenBild weichzeichnen Rauschen entfernenRauschen entfernen Bilder addierenBilder addieren Bilder kalibrierenBilder kalibrieren
Dunkelbild und Flat-BildDunkelbild und Flat-Bild
BildbearbeitungBildbearbeitung
Zusätzliches Problem:Zusätzliches Problem: GetPixelGetPixel und und SetPixelSetPixel aus der aus der
BitmapBitmap-Klasse sind sehr langsam-Klasse sind sehr langsam Besser:Besser:
unsafeunsafe-Code mit richtigen Zeigern-Code mit richtigen Zeigern IntPtrIntPtr kann nicht benutzt werden: kann nicht benutzt werden:
Zeigerarithmetik nicht erlaubtZeigerarithmetik nicht erlaubt LockBits, Scan0, UnlockBitsLockBits, Scan0, UnlockBits Deutlich schnellerDeutlich schneller
BildbearbeitungBildbearbeitung
Um das Letzte herauszuholen:Um das Letzte herauszuholen: Code in unmanaged C++ schreiben und Code in unmanaged C++ schreiben und
kapselnkapseln .NET-Wrapper-Klassen um die .NET-Wrapper-Klassen um die
Achtung: Aufruf von unmanaged Achtung: Aufruf von unmanaged Code!Code!
Benutzung von Zeigern aus VB.NET-Benutzung von Zeigern aus VB.NET-Projekten:Projekten: Code (z.B.) in C#-Klassen kapseln und Code (z.B.) in C#-Klassen kapseln und
benutzenbenutzen
SpektroskopieSpektroskopie
SpektrokopieSpektrokopie
Zerlegung des Lichtes in seine Zerlegung des Lichtes in seine farblichen Bestandteile (sichtbarer farblichen Bestandteile (sichtbarer Bereich: blau, grün, gelb, rot)Bereich: blau, grün, gelb, rot)
Es gibt auch unsichtbare Bereiche:Es gibt auch unsichtbare Bereiche: UV-, IR-, Radio-, Röntgen-, Gamma-UV-, IR-, Radio-, Röntgen-, Gamma-
StrahlungStrahlung Spezielle Detektoren sind erforderlichSpezielle Detektoren sind erforderlich Nicht jede Strahlung kann von der Erde Nicht jede Strahlung kann von der Erde
aus beobachtet werden aus beobachtet werden Atmosphäre Atmosphäre Weltraumbeobachtung von Satelitten Weltraumbeobachtung von Satelitten
ausaus Hubble, Cobe, Iras,…Hubble, Cobe, Iras,…
SpektrokopieSpektrokopie
Kontinuierliches Spektrum (z.B. von Kontinuierliches Spektrum (z.B. von einer Glühlampe):einer Glühlampe):
Spektrum des Sterns Wega im Spektrum des Sterns Wega im Sternbild Leier (Entf. ca. 30 Sternbild Leier (Entf. ca. 30 Lichtjahre):Lichtjahre):
SpektroskopieSpektroskopie Was kann man mit Spektroskopie Was kann man mit Spektroskopie
Einer Sonnen-Atmosphäre (auch Einer Sonnen-Atmosphäre (auch Druck)Druck)
Einer DunkelwolkeEiner Dunkelwolke Einer MolekülwolkeEiner Molekülwolke
Alter von SternenAlter von Sternen Bewegungsgeschwindigkeiten (Doppler-Bewegungsgeschwindigkeiten (Doppler-
Effekt)Effekt) Rotationsbewegungen von SternenRotationsbewegungen von Sternen Auflösung von DoppelsternenAuflösung von Doppelsternen Exo-PlanetenExo-Planeten ……
SpektroskopieSpektroskopie
AbsorptionslinienAbsorptionslinien Hintergrund strahlt Kontinuum ausHintergrund strahlt Kontinuum aus Davorliegendes Gas „entnimmt“ Licht Davorliegendes Gas „entnimmt“ Licht
um bestimmte angeregte Zustände zu um bestimmte angeregte Zustände zu erreichenerreichen
EmissionlinienEmissionlinien Ein Stern regt das umliegende Gas anEin Stern regt das umliegende Gas an Das Gas sendet Licht bestimmter Farbe Das Gas sendet Licht bestimmter Farbe
aus, wenn es sich wieder „abregt“aus, wenn es sich wieder „abregt“
Spektren sind Spektren sind Gauss-FunktionenGauss-Funktionen
3 Größen:3 Größen: Mittelwert bMittelwert b Breite in halber Breite in halber
Höhe aHöhe a Höhe (hier: 1)Höhe (hier: 1)
0
0.5
1
1.5
2
2.5
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
)2
)(exp(
2
1)(
2
2
a
bx
axy
Gauss-FitGauss-Fit
Ein Spektrum besteht aus mehreren Ein Spektrum besteht aus mehreren PeaksPeaks
Für jeden Peak müssen 3 Parameter Für jeden Peak müssen 3 Parameter bestimmt werdenbestimmt werden
Verfahren: Nullstellensuche nach Verfahren: Nullstellensuche nach Newton-RhapsonNewton-Rhapson
Man braucht:Man braucht: Die 1. Ableitungen nach allen Die 1. Ableitungen nach allen
ParameternParametern Die 2. Ableitungen (Hesse-Matrix)Die 2. Ableitungen (Hesse-Matrix)
Gibt die Schrittweite bei der Suche anGibt die Schrittweite bei der Suche an
Gauss-FitGauss-Fit
Man versucht, die Parameter einer Man versucht, die Parameter einer Gauss-Funktion so zu wählen, dass Gauss-Funktion so zu wählen, dass die Abweichungen von den die Abweichungen von den gemessenen Daten möglichst klein gemessenen Daten möglichst klein werdenwerden
Performance und MTPerformance und MT
Gibt es Situationen, in denen auf Gibt es Situationen, in denen auf einer Single-Prozessor-Maschine einer Single-Prozessor-Maschine multithreaded Code schneller ist als multithreaded Code schneller ist als seriell abgearbeiteter Code?seriell abgearbeiteter Code?
Performance und MTPerformance und MT
Antwort: Ja!Antwort: Ja!
Besonders dann, wenn Besonders dann, wenn unterschiedliche Hardware unterschiedliche Hardware ausgenutzt wirdausgenutzt wird Rechnen und I/ORechnen und I/O Rechnen und GrafikRechnen und Grafik ……
Performance und OpenMPPerformance und OpenMP OpenMP ist eine einfache Möglichkeit OpenMP ist eine einfache Möglichkeit
für Multithreading bei Algorithmenfür Multithreading bei Algorithmen Für Fortran (Intel)Für Fortran (Intel) Für Für C++C++ (Intel, VS 2005) (Intel, VS 2005)
In OpenMP:In OpenMP: Steuerung der Parallelisierung durch C+Steuerung der Parallelisierung durch C+
+-Pragma im Code+-Pragma im Code Z.B.: Z.B.: #pragma omp parallel#pragma omp parallel Steueranweisung stehen direkt im CodeSteueranweisung stehen direkt im Code
Mit nativem und mit managed CodeMit nativem und mit managed Code Gut anwendbar für AlgorithmenGut anwendbar für Algorithmen
OpenMPOpenMP Es gibt unterschiedliche Arten der Es gibt unterschiedliche Arten der
Parallelisierung:Parallelisierung: Parallelisierung von SchleifenParallelisierung von Schleifen Parallelisierung von Code-RegionenParallelisierung von Code-Regionen
Nicht zu vergessen:Nicht zu vergessen: SynchronisierungSynchronisierung
Und wie steht‘s mit der Performance?Und wie steht‘s mit der Performance?
Schleifen mit OpenMPSchleifen mit OpenMP Schleifen werden auf mehrere Schleifen werden auf mehrere
Threads automatisch aufgeteiltThreads automatisch aufgeteilt Anzahl kann angegeben werden oder Anzahl kann angegeben werden oder
ist vom System vorgegeben oder wird ist vom System vorgegeben oder wird dynamisch ausgewähltdynamisch ausgewählt
void saxpy(double z[], double a, double x[], double y, int n){#pragma omp parallel for for(int i = 0; i < n; i++) { z[i] = a * x[i] + y; }}
Schleifen mit OpenMPSchleifen mit OpenMP
Serielle Ausführung im Master-Thread
Serielle Ausführung im Master-Thread
Parallele Ausführung
Automatische Synchronisierung
Schleifen mit OpenMPSchleifen mit OpenMP
Das Verfahren kann auch zu Das Verfahren kann auch zu Problemen führen:Problemen führen:
void test(double x[], double z[], int n){#pragma omp parallel for for(int i = 1; i < n; i++) { z[i] = x[i] + z[i – 1]; // Fehler!!! }}
Schleifen mit OpenMPSchleifen mit OpenMP Häufig braucht man „Reduktionen“Häufig braucht man „Reduktionen“
Es gibt mehrere Threads mit eigenen z-Es gibt mehrere Threads mit eigenen z-Variablen, die dann zum Schluss zum Variablen, die dann zum Schluss zum Endergebnis addiert werdenEndergebnis addiert werden
double test(double x[], int n){ double z = 0.0;
#pragma omp parallel for reduction(+:z) for(int i = 1; i < n; i++) { z += x[i]; }
return z;}
Code-Regionen und -Code-Regionen und -SektionenSektionen
Codeteile können ebenfalls parallel Codeteile können ebenfalls parallel laufenlaufen
Anzahl der Threads kann angegeben Anzahl der Threads kann angegeben werden oder ist vom System werden oder ist vom System vorgegebenvorgegeben
Mehrere Sektionen können parallel Mehrere Sektionen können parallel laufenlaufenvoid test(){ #pragma omp parallel num_threads(4) { Console::WriteLine(„Hallo, TechTalk!“); }}
OpenMPOpenMP Das hört sich ja sehr einfach an…Das hört sich ja sehr einfach an… ……es kann aber auch sehr kompliziert es kann aber auch sehr kompliziert
werdenwerden Das sprengt aber den Rahmen hier!Das sprengt aber den Rahmen hier!
Vorsicht beim Programmieren mit Vorsicht beim Programmieren mit mehreren Threads ist mehreren Threads ist IMMERIMMER wichtig wichtig Immer die Performance prüfenImmer die Performance prüfen Immer die Ergebnisse prüfenImmer die Ergebnisse prüfen
OpenMP ist gut für AlgorithmenOpenMP ist gut für Algorithmen OpenMP ist nicht gut für die OpenMP ist nicht gut für die
Parallelisierung von User InterfacesParallelisierung von User Interfaces
OpenMP-PerformanceOpenMP-Performance ACHTUNG: Performance-Tests sind ACHTUNG: Performance-Tests sind
mit Beta-Versionen immer etwas mit Beta-Versionen immer etwas kritisch!!!kritisch!!!
Trotzdem:Trotzdem: Einige Versuche…Einige Versuche… ……auf Single-Prozessor-Maschine (P4, 2.4 auf Single-Prozessor-Maschine (P4, 2.4
ZusammenfassungZusammenfassung .NET ist performant.NET ist performant
Auch ausreichend für Auch ausreichend für wissenschaftliche Berechnungenwissenschaftliche Berechnungen
Trotzdem: Wenn man „alles Trotzdem: Wenn man „alles rausholen“ will, vorher prüfenrausholen“ will, vorher prüfen
JITter werden immer besserJITter werden immer besser Maschinencode: Nur x86-optimiertMaschinencode: Nur x86-optimiert JIT in Zukunft: Optimierung auf JIT in Zukunft: Optimierung auf