Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Lutz Driessen Geändert vor über 10 Jahren
1
Star Trek 11: Unendliche Weiten Wissenschafliche Software mit .NET
<<Presentation Title>> Star Trek 11: Unendliche Weiten Wissenschafliche Software mit .NET Bernd Marquardt Microsoft C++ MVP Microsoft Regional Director Germany Software+Consulting
2
Agenda Einführung .NET-Performance allgemein Die unendlichen Weiten…
Ein Beispiel: FFT Die unendlichen Weiten… CCD-Kameras und Bilder Bildbearbeitung, Pixel-Verfahren mit C# Spektroskopie Gauss-Fit von Peaks in einem Spektrum Performance und MT (I/O, OpenMP) Zusammenfassung
3
Einführung .NET war neu (vor einigen Jahren)
Version 1.0, 1.1, 2.0 vom Framework Es sollte mittlerweile ganz gut funktionieren Wie steht es mit der Performance von .NET? Mathematische Funktionen System.Math Rechengenauigkeit IEEE 754 Grafik (2D, 3D) unter Windows DirectX Ausführungsgeschwindigkeit ??? I/O-Performance ???
4
Einführung Wenn es um schnelles Rechnen ging, gab es immer bestimmte Preferenzen Historie: Maschinensprache (lang, lang ist‘s her) FORTRAN (lang ist‘s her) C (schon mal gehört) C++ (kennt man) .NET??? (in Zukunft??) FORTRAN ist noch nicht ganz aus dem Rennen: Fortran für .NET (Lahey)
5
Einführung Performance-Probleme können sehr vielschichtig sein:
Mangelnde Skalierbarkeit Zu wenig Arbeitsspeicher Langsames Netzwerk Zu langsame Server Schlechtes Scheduling Langsame Peripherie Falsche Programmstruktur Multithreading-Probleme Langsamer Prozessor
6
System.Math Vielfältige mathematische Funktionen
Ca. 30 Methoden und Properties Standard-Mathematik Das ist eigentlich NICHT so viel Kann aber leicht erweitert werden Eigene statische Klassen mit statischen Methoden Siehe „Numerical Reciepts“
7
Rechengenauigkeit Float: 32 bit Double: 64 bit Decimal: 128 bit
Ca. 7 signifikante Stellen x 1038 bis x 1038 Double: 64 bit Ca. 15 signifikante Stellen x bis x 10308 Decimal: 128 bit -79,228,162,514,264,337,593,543,950,335 bis +79,228,162,514,264,337,593,543,950,335
8
Rechengenauigkeit Demo: TestIEEE
Decimal-Typ ist eher für Finanz-Rechnungen mit großen Zahlen erforderlich Genauigkeit ist über einen bestimmten Wertebereich sehr gut Decimal = Integer (96 bit) + Skalierung + Vorzeichen Und wie ist die Performance? Demo: TestIEEE
9
Nicht mathematisch, aber wichtig: Strings
Hier kommt der Garbage-Collector ins Spiel Verwalteter Speicher Verwaltung kostet Zeit! Gefährlich: string += string; Häufiges Neuanlegen und Zerstören von Objekten TestString TestStringBuilder
10
String + StringBuilder
11
StringBuilder Bei vielen (mehr als 5) String-Operationen StringBuilder benutzen Umwandlung in string kostet nichts StringBuilder-Klasse enthält wichtige Methoden Konvertieren nicht immer erforderlich Z.B.: Replace
12
Generics – oder doch nicht?
Früher: Alles mit Collections Generics können ihre Daten im „richtigen“ Typ speichern Kein Boxing und Unboxing nötig (System.Object) Das bringt Performance-Gewinne… …und Typsicherheit TestGenerics
13
Performance: Allgemein
Runtime und JIT-Compiler sind für alle Sprachen gleich Performance-Unterschiede können nur aus den sprach-eigenen Compilern entstehen Analysemöglichkeiten 1. Möglichkeit: Analyse des IL-Codes mit dem Tool ILDASM 2. Möglichkeit: Analyse des vom JIT-Compiler erzeugten Maschinencodes mit DebugBreak();
14
IL-Code-Unterschiede
VB .NET ldc.i4.0 stloc.0 br.s IL_000e ldloc.0 ldc.i4.1 add ldc.i4.s 100 blt.s IL_0006 ldc.i4.0 stloc.0 ... ldloc.0 ldc.i4.1 add.ovf ldc.i4.s 99 ble.s IL_0004
15
Arithmetik (einfach!) ((double) i + (double) j) * 2.5
VB sek VC sek VC .NET unmng sek VC .NET mng sek C# sek VB .NET (7.625) sek VS 6.0 Asm. VS .NET CLR
16
Arithmetik (kompliziert!)
(((double) i + (double) j) * 2.5) / (i + j + 1) VB sek VC sek VC .NET unmng sek VC .NET mng sek C# sek VB .NET sek VS 6.0 Asm. VS .NET CLR
17
Arithmetik (esotherisch!)
Fast Fourier Transformation Sägezahn aus Einzelwerten Daten-Array als lokale Variable VC++ unmng. (lok. Array) 63 msek VC++ mng. (lok. Array) 63 msek Allgemeine Ergebnisse: Mathematische Algorithmen sind sehr schnell – Rechenoperationen ohne Einschränkungen
18
Arithmetik (esotherisch!)
Fast Fourier Transformation Sägezahn aus Einzelwerten Daten-Array auf dem Heap (mit VC.NET unter Kontrolle des Garbage Collectors) VC++ unmng. (Heap) sek VC++ mng. (GC) sek Allgemeine Ergebnisse: Auch mit GC sind schnelle Berechnungen möglich
19
Arithmetik Je komplexer die Berechnungen, desto geringer werden die Unterschiede bei den CLR-Sprachen Allgemeines Ergebnis: Es wurde kein Testbeispiel gefunden, bei dem die CLR-Zeiten abnormal langsam waren Bei allen Testbeispielen waren die CLR-Zeiten immer wesentlich besser, als die Zeiten von VB 6
20
Optimierung des Codes d += (double) i1 + 7.5 * 11.2 / 2.5;
Sprach-Compiler fasst zusammen for-Schleifen mit wenigen Durchgängen JIT macht Loop-Unrolling for(i = 5; i < 5; i++) JIT beachtet die Schleife nicht d += 3 + a – a; JIT erzeugt keinen Code für „+ a - a“ ....
21
…jetzt kommt die Unendlichkeit
Hobby: Astronomie und Astrophysik Man fängt an… …einfach mit gucken… …dann fotografieren… …dann messen… …dann auswerten… …
22
Equipment
23
CCD-Technologie Früher: Normale Kleinbild-Kameras Nachteile:
Unempfindlich Scharfstellung schwierig Objektpositionierung schwierig Nicht linear Vorteile: Großes Format Kein Notebook erforderlich Kein Strombedarf Farbbild: Einmal belichten
24
CCD-Technologie Einige Bilder... Heute: CCD-Kameras
Chips werden jetzt immer größer (Kleinbildformat) Höchste Quanteneffizienz Man sieht sofort, was man bekommt Es gibt auch schon Farb-CCD‘s Auflösung ist sehr hoch Wichtig: Wenn man eine „gute“ Kamera hat, braucht man auch ein „gutes“ Notebook Einige Bilder...
25
Bild-Aufnahme Bearbeitung CCD-Kamera wird gekühlt Flat-Bild Dunkelbild
Mehrere Rohbilder Final-Bild = (Rohbild – Dunkelbild) / Flat-Bild Alle Final-Bilder addieren Kontrast- und Helligkeitsverstärkung Bearbeitung
26
Bildbearbeitung Es gibt CCD-Chip mit über 10 Millionen Pixel!!!
Alle Bildoperationen dauern entsprechend lange Beispiel: Download mit USB 2.0 ST-402ME ,000 Pixel 0.8 sek ST-2000XME 2,000,000 Pixel 4.8 sek
27
Bildbearbeitung Anzahl der Pixel ist ebenfalls kritisch bei allen Bildbearbeitungsoperationen Kontrast und Helligkeit ändern Bild schärfen Bild weichzeichnen Rauschen entfernen Bilder addieren Bilder kalibrieren Dunkelbild und Flat-Bild
28
Bildbearbeitung BmpWork Zusätzliches Problem: Besser:
GetPixel und SetPixel aus der Bitmap-Klasse sind sehr langsam Besser: unsafe-Code mit richtigen Zeigern IntPtr kann nicht benutzt werden: Zeigerarithmetik nicht erlaubt LockBits, Scan0, UnlockBits Deutlich schneller BmpWork
29
Bildbearbeitung Um das Letzte herauszuholen:
Code in unmanaged C++ schreiben und kapseln .NET-Wrapper-Klassen um die öffentlichen C++-Klassen schreiben Aus belibigen .NET-Sprachen benutzen Achtung: Aufruf von unmanaged Code! Benutzung von Zeigern aus VB.NET-Projekten: Code (z.B.) in C#-Klassen kapseln und benutzen
30
Spektroskopie
31
Spektrokopie Zerlegung des Lichtes in seine farblichen Bestandteile (sichtbarer Bereich: blau, grün, gelb, rot) Es gibt auch unsichtbare Bereiche: UV-, IR-, Radio-, Röntgen-, Gamma-Strahlung Spezielle Detektoren sind erforderlich Nicht jede Strahlung kann von der Erde aus beobachtet werden Atmosphäre Weltraumbeobachtung von Satelitten aus Hubble, Cobe, Iras,…
32
Spektrokopie Kontinuierliches Spektrum (z.B. von einer Glühlampe):
Spektrum des Sterns Wega im Sternbild Leier (Entf. ca. 30 Lichtjahre):
33
Spektroskopie Was kann man mit Spektroskopie ermitteln:
Chemische Zusammensetzung Einer Sonnen-Atmosphäre (auch Druck) Einer Dunkelwolke Einer Molekülwolke Alter von Sternen Bewegungsgeschwindigkeiten (Doppler-Effekt) Rotationsbewegungen von Sternen Auflösung von Doppelsternen Exo-Planeten …
34
Spektroskopie Absorptionslinien Emissionlinien
Hintergrund strahlt Kontinuum aus Davorliegendes Gas „entnimmt“ Licht um bestimmte angeregte Zustände zu erreichen Emissionlinien Ein Stern regt das umliegende Gas an Das Gas sendet Licht bestimmter Farbe aus, wenn es sich wieder „abregt“
35
Spektroskopie Einige Spektren... Vorgehensweise: Teleskop Spektrometer
Kamera Auswertungs- software Einige Spektren...
36
Gauss-Fit Die Linien in Spektren sind Gauss-Funktionen 3 Größen:
Mittelwert b Breite in halber Höhe a Höhe (hier: 1)
37
Gauss-Fit Ein Spektrum besteht aus mehreren Peaks
Für jeden Peak müssen 3 Parameter bestimmt werden Verfahren: Nullstellensuche nach Newton-Rhapson Man braucht: Die 1. Ableitungen nach allen Parametern Die 2. Ableitungen (Hesse-Matrix) Gibt die Schrittweite bei der Suche an
38
Gauss-Fit Demo: GaussFit
Man versucht, die Parameter einer Gauss-Funktion so zu wählen, dass die Abweichungen von den gemessenen Daten möglichst klein werden Demo: GaussFit
39
Performance und MT Gibt es Situationen, in denen auf einer Single-Prozessor-Maschine multithreaded Code schneller ist als seriell abgearbeiteter Code?
40
Performance und MT IO_Calc_MT Antwort: Ja!
Besonders dann, wenn unterschiedliche Hardware ausgenutzt wird Rechnen und I/O Rechnen und Grafik … IO_Calc_MT
41
Performance und OpenMP
OpenMP ist eine einfache Möglichkeit für Multithreading bei Algorithmen Für Fortran (Intel) Für C++ (Intel, VS 2005) In OpenMP: Steuerung der Parallelisierung durch C++-Pragma im Code Z.B.: #pragma omp parallel Steueranweisung stehen direkt im Code Mit nativem und mit managed Code Gut anwendbar für Algorithmen
42
OpenMP Es gibt unterschiedliche Arten der Parallelisierung:
Parallelisierung von Schleifen Parallelisierung von Code-Regionen Nicht zu vergessen: Synchronisierung Und wie steht‘s mit der Performance?
43
Schleifen mit OpenMP Schleifen werden auf mehrere Threads automatisch aufgeteilt Anzahl kann angegeben werden oder ist vom System vorgegeben oder wird dynamisch 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; }
44
Schleifen mit OpenMP Serielle Ausführung im Master-Thread
Parallele Ausführung Automatische Synchronisierung Serielle Ausführung im Master-Thread
45
Schleifen mit OpenMP Das Verfahren kann auch zu 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!!! }
46
Schleifen mit OpenMP DemoOpenMP Häufig braucht man „Reduktionen“
Es gibt mehrere Threads mit eigenen z-Variablen, die dann zum Schluss zum Endergebnis 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; DemoOpenMP
47
Code-Regionen und -Sektionen
Codeteile können ebenfalls parallel laufen Anzahl der Threads kann angegeben werden oder ist vom System vorgegeben Mehrere Sektionen können parallel laufen void test() { #pragma omp parallel num_threads(4) Console::WriteLine(„Hallo, TechTalk!“); }
48
OpenMP Das hört sich ja sehr einfach an…
…es kann aber auch sehr kompliziert werden Das sprengt aber den Rahmen hier! Vorsicht beim Programmieren mit mehreren Threads ist IMMER wichtig Immer die Performance prüfen Immer die Ergebnisse prüfen OpenMP ist gut für Algorithmen OpenMP ist nicht gut für die Parallelisierung von User Interfaces
49
OpenMP-Performance ACHTUNG: Performance-Tests sind mit Beta-Versionen immer etwas kritisch!!! Trotzdem: Einige Versuche… …auf Single-Prozessor-Maschine (P4, 2.4 GHz, ohne HyperThreading, 400 MHz FSB) ... auf Single-Prozessor-Maschine (P4, 3.2 GHz, mit HyperThreading, 800 MHz FSB) …auf Dual-Prozessor-Maschine (P3, 600 MHz)
50
OpenMP-Performance Schleifen-Parallelisierung
Inn. Schleife Threads ZeitSingle ZeitSingle-HT ZeitDual 20, sek sek sek 20, sek sek sek 20, sek sek sek 20, sek sek sek 20,000 Ohne sek sek sek Single = Single Prozessor Single-HT = Single Prozessor mit Hyperthreading Dual = Dual Prozessor
51
OpenMP-Performance = ca. 15 % schneller! Schleife mit Reduktion
Schleife Threads ZeitSingle ZeitSingle-HT ZeitDual 10,000, sek sek sek 10,000, sek sek sek 10,000, sek sek sek 10,000, sek sek sek 10,000, sek sek sek 10,000, sek sek sek 10,000,000 Ohne sek sek sek = ca. 15 % schneller!
52
Zusammenfassung .NET ist performant
Auch ausreichend für wissenschaftliche Berechnungen Trotzdem: Wenn man „alles rausholen“ will, vorher prüfen JITter werden immer besser Maschinencode: Nur x86-optimiert JIT in Zukunft: Optimierung auf bestimmten Prozessortyp (z.B.: P4-HT) Wissenschaftliche Software ist mit Windows-UI auch leichter zu bedienen
53
<<Presentation Title>>
Questions and Answers
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.