star trek 11: unendliche weiten wissenschafliche software mit.net bernd marquardt microsoft c++ mvp...
Post on 05-Apr-2015
107 Views
Preview:
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@go-sky.deberndm@go-sky.dehttp://www.go-sky.dehttp://www.go-sky.de
AgendaAgenda EinführungEinführung .NET-Performance allgemein.NET-Performance allgemein
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
DirectXDirectX Ausführungsgeschwindigkeit Ausführungsgeschwindigkeit ??? ??? I/O-Performance I/O-Performance ??? ???
EinführungEinführung
Wenn es um schnelles Rechnen ging, Wenn es um schnelles Rechnen ging, gab es immer bestimmte gab es immer bestimmte PreferenzenPreferenzen
Historie:Historie: Maschinensprache Maschinensprache (lang, lang ist‘s (lang, lang ist‘s
her)her) FORTRANFORTRAN (lang ist‘s her)(lang ist‘s her) CC (schon mal (schon mal
gehört)gehört) C++C++ (kennt man)(kennt man) .NET???.NET??? (in Zukunft??)(in Zukunft??)
FORTRAN ist noch nicht ganz aus FORTRAN ist noch nicht ganz aus dem Rennen: Fortran für .NET dem Rennen: Fortran für .NET (Lahey)(Lahey)
EinführungEinführung Performance-Probleme können sehr Performance-Probleme können sehr
vielschichtig sein:vielschichtig sein: Mangelnde SkalierbarkeitMangelnde Skalierbarkeit Zu wenig ArbeitsspeicherZu wenig Arbeitsspeicher Langsames NetzwerkLangsames Netzwerk Zu langsame ServerZu langsame Server Schlechtes SchedulingSchlechtes Scheduling Langsame PeripherieLangsame Peripherie Falsche ProgrammstrukturFalsche Programmstruktur Multithreading-ProblemeMultithreading-Probleme Langsamer ProzessorLangsamer Prozessor
System.MathSystem.Math
Vielfältige mathematische Vielfältige mathematische FunktionenFunktionen
Ca. 30 Methoden und PropertiesCa. 30 Methoden und Properties Standard-MathematikStandard-Mathematik
Das ist eigentlich NICHT so vielDas ist eigentlich NICHT so viel Kann aber leicht erweitert werdenKann aber leicht erweitert werden
Eigene statische Klassen mit statischen Eigene statische Klassen mit statischen MethodenMethoden
Siehe „Numerical Reciepts“Siehe „Numerical Reciepts“
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
Decimal = Integer (96 bit) + Decimal = Integer (96 bit) + Skalierung + VorzeichenSkalierung + Vorzeichen
Und wie ist die Performance?Und wie ist die Performance?
Nicht mathematisch, aber Nicht mathematisch, aber wichtig: Stringswichtig: Strings Hier kommt der Garbage-Collector Hier kommt der Garbage-Collector
ins Spielins Spiel Verwalteter SpeicherVerwalteter Speicher Verwaltung kostet Zeit!Verwaltung kostet Zeit!
Gefährlich:Gefährlich: stringstring += string;+= string; Häufiges Neuanlegen und Zerstören von Häufiges Neuanlegen und Zerstören von
ObjektenObjekten
String + StringBuilderString + StringBuilder
0
5000
10000
15000
20000
25000
30000
35000
40000
45000
50000
0 5000 10000 15000 20000 25000 30000 35000 40000 45000 50000
0
50
100
150
200
250
300
350
400
450
500
0 500000 1000000 1500000 2000000 2500000 3000000 3500000 4000000 4500000 5000000
StringString
StringBuilderStringBuilder
StringBuilderStringBuilder
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
VB 6.0VB 6.0 50.610 sek 50.610 sek VC++ 6.0VC++ 6.0 5.160 sek5.160 sek
VC .NET unmng.VC .NET unmng. 4.992 sek4.992 sek
VC .NET mng.VC .NET mng. 5.359 sek5.359 sek C#C# 6.594 sek6.594 sek VB .NETVB .NET (7.625)(7.625) 6.598 sek6.598 sek
VS 6.0VS 6.0
VS .NETVS .NET
Asm.Asm.
CLRCLR
Arithmetik (kompliziert!)Arithmetik (kompliziert!) (((double) i + (double) j) * 2.5) / (i + j (((double) i + (double) j) * 2.5) / (i + j
+ 1)+ 1)
VB 6.0VB 6.0 80.313 sek80.313 sek VC++ 6.0VC++ 6.0 5.244 sek 5.244 sek
VC .NET unmng.VC .NET unmng. 5.156 sek 5.156 sek
VC .NET mng.VC .NET mng. 5.172 sek 5.172 sek C#C# 5.156 sek 5.156 sek VB .NETVB .NET 5.146 sek 5.146 sek
VS 6.0VS 6.0
VS .NETVS .NET
Asm.Asm.
CLRCLR
Arithmetik (esotherisch!)Arithmetik (esotherisch!) Fast Fourier TransformationFast Fourier Transformation
Sägezahn aus 65.536 EinzelwertenSägezahn aus 65.536 Einzelwerten Daten-Array als lokale VariableDaten-Array als lokale Variable
VC++ unmng. (lok. Array)VC++ unmng. (lok. Array) 63 63 msekmsek
VC++ mng. (lok. Array)VC++ mng. (lok. Array) 63 63 msekmsek
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)
VC++ unmng. (Heap)VC++ unmng. (Heap) 2.250 2.250 seksek
VC++ mng. (GC)VC++ mng. (GC) 2.609 2.609 seksek
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
Optimierung des CodesOptimierung des Codes
d += (double) i1 + 7.5 * 11.2 / 2.5;d += (double) i1 + 7.5 * 11.2 / 2.5; Sprach-Compiler fasst zusammenSprach-Compiler fasst zusammen
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… ……
EquipmentEquipment
CCD-TechnologieCCD-Technologie Früher: Normale Kleinbild-KamerasFrüher: Normale Kleinbild-Kameras
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
Beispiel: Download mit USB 2.0
ST-402ME 400,000 Pixel 0.8 sekST-2000XME2,000,000 Pixel 4.8 sek
BildbearbeitungBildbearbeitung
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
öffentlichen C++-Klassen schreibenöffentlichen C++-Klassen schreiben Aus belibigen .NET-Sprachen benutzenAus belibigen .NET-Sprachen benutzen
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
ermitteln:ermitteln: Chemische ZusammensetzungChemische Zusammensetzung
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“
SpektroskopieSpektroskopie
Vorgehensweise:Vorgehensweise: TeleskopTeleskop SpektrometerSpektrometer KameraKamera Auswertungs-Auswertungs-
softwaresoftware
Gauss-FitGauss-Fit Die Linien in Die Linien in
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
GHz, GHz, ohneohne HyperThreading, 400 MHz HyperThreading, 400 MHz FSB)FSB)
... auf Single-Prozessor-Maschine (P4, 3.2 ... auf Single-Prozessor-Maschine (P4, 3.2 GHz, GHz, mitmit HyperThreading, 800 MHz FSB) HyperThreading, 800 MHz FSB)
……auf auf DualDual-Prozessor-Maschine (P3, 600 -Prozessor-Maschine (P3, 600 MHz)MHz)
OpenMP-PerformanceOpenMP-Performance
Schleifen-ParallelisierungSchleifen-ParallelisierungInn. Schleife Threads ZeitSingleZeitSingle-HT ZeitDual
20,000 4 2.844 sek 1.953 sek 9.937 sek20,000 3 2.583 sek 1.360 sek 8.791 sek20,000 2 2.393 sek 0.766 sek 5.953 sek20,000 1 0.751 sek 0.625 sek 9.812 sek
20,000 Ohne 0.631 sek 0.532 sek 9.988 sek
Single = Single ProzessorSingle-HT = Single Prozessor mit HyperthreadingDual = Dual Prozessor
OpenMP-PerformanceOpenMP-Performance
Schleife mit ReduktionSchleife mit ReduktionSchleife Threads ZeitSingleZeitSingle-HT ZeitDual
10,000,000 10 2.494 sek 1.843 sek 9.922 sek10,000,000 6 2.484 sek 1.859 sek 9.906 sek10,000,000 4 2.493 sek 1.829 sek 9.937 sek10,000,000 3 2.473 sek 1.844 sek 9.921 sek10,000,000 2 2.463 sek 1.844 sek 9.890 sek10,000,000 1 2.524 sek 2.234 sek 16.219 sek
10,000,000 Ohne 2.444 sek 2.141 sek 15.853 sek
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
bestimmten Prozessortyp (z.B.: P4-bestimmten Prozessortyp (z.B.: P4-HT)HT)
Wissenschaftliche Software ist mit Wissenschaftliche Software ist mit Windows-UI auch leichter zu Windows-UI auch leichter zu bedienenbedienen
Questions and AnswersQuestions and Answers
top related