Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Performanz-orientierte Programmierung in C# Performanzaspekte von MS.NET Matej Ciesko Microsoft Student Partner Friedrich – Alexander Universität Erlangen.

Ähnliche Präsentationen


Präsentation zum Thema: "Performanz-orientierte Programmierung in C# Performanzaspekte von MS.NET Matej Ciesko Microsoft Student Partner Friedrich – Alexander Universität Erlangen."—  Präsentation transkript:

1 Performanz-orientierte Programmierung in C# Performanzaspekte von MS.NET Matej Ciesko Microsoft Student Partner Friedrich – Alexander Universität Erlangen – Nürnberg

2 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32Einführung Performanz-orientierte Programmierung Optimierung [ Optimizing is the process of changing a program or the environment in which it runs to improve its performance.] Prozess der Optimierung: 1.Problem identifizieren 2.Problem evaluieren 3.Anwenden einer Optimierungstechnik

3 Agenda 1.Einführung 2.Performanzzähler (performance counters) –Nanosekunden Timer –MS.NET Profiling API 3.MS.NET – Performanzaspekte –CLR, JIT, CG 4.Performanzaspekte bei Entwicklung mit C# –Objekte (GC) –Datentypen –Sicherer/Unsicherer Code –… 5.Zusammenfassung

4 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32Ziele 1.Performanzaspekte des MS.NET 2.Messen von Performanzverhalten 3.Schreiben vom effizienten Code (C#)

5 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32Einführung Beispielapplikation: Matrix – Matrix Multiplikation C = A * B

6 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32 Performanzaspekte von C# Arrays Array[index] Eliminierung der Überprüfung: Längentest im For-Header for (int i=0; i < Array.Length; i++) for (int i=0; i < Array.Length + y; i++) Array[i+6]; Überprüfung sum += a[i]

7 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32 Performanzaspekte von C# C# Zeiger –Arbeiten außerhalb vom GC –Pinnen von Objekten zum Speicher unsafe{ fixed (type* ptr = expr) statement } –Anmerkung: Compiler flag: /unsafe Code ist unsafe Nach dem statement sind alle pinned Objekte für den GC wieder freigegeben

8 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32Einführung Beispielapplikation:

9 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32 Profiling Performanzzähler

10 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32Profiling Fundamentale Prinzipien der Performanz-orientierten Programmierung: 1. Performanzziele setzen 2. Messen, messen und noch mehr messen 3. Optimieren Profiling: Präzise Messung (von Zeit/Clock Ticks) von Hardware und/Applikation um Aussagen über Laufzeitverhalten von Applikation treffen zu können. 1.Hardwarezähler (performance counters) 2.Windows Performance Counters 3.MS.NET Profiler API Perf. Counters MS.NETC#Zusammenfassung

11 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32Profiling Hardware Counters Sehr hohe zeitliche Auflösung!!! Performanzereignisse –Programmcharakteristika, Speicher, pipeline stalls, branch prediction, ressource utilization CPU Profiling Hardware –Ereignisdetektoren (event detectors) –Ereigniszähler (event counters) Beispiel: RDTSC(Read Time Step Counter) typedef struct _int32 { __int32 i32[2] } BigInt; BigInt start_ticks, end_tickes; _asm { RDTSC mov start_ticks.int32val.i32[0], eax mov start_ticks.int32val.i32[4], edx } >2 x CPU SpeedStep Perf. Counters MS.NETC#Zusammenfassung

12 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32Profiling Windows Performance Counters –MS Windows API –perfmon.exe Perf. Counters MS.NETC#Zusammenfassung

13 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32Profiling.NET CLR Profiling Services speziell für Verhalten von.NET Applikationen COM – Schnittstellen: ICorProfilerCallback ICorProfilerInfo Profiler Design COM Server Komponente implementieren ICorProfilerCallback implementieren Perf. Counters MS.NETC#Zusammenfassung

14 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32Profiling.NET CLR Profiling Services Perf. Counters MS.NETC#Zusammenfassung CLR _myProfiler set Cor_Enable_Profiling = 0x1 set Cor_Profiler={FA0C6E77-AFF4-…992C} Cor_Enable_Profiling = TRUE CoCreateInstance ICorProfilerCallback::Initialize

15 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32Profiling Allocation Profiler (Demo) Perf. Counters MS.NETC#Zusammenfassung

16 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32Profiling Allocation Profiler Intel® VTune Performance Analyzer Rational® PurifyPlus for Windows Compuware® DevPartner Profiler Perf. Counters MS.NETC#Zusammenfassung

17 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32 MS.NET Performanzaspekte Speicherverwaltung Compiler

18 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32.NET Performanzaspekte Fortran Source code Compiler C++C# CompilerCompiler Assembly IL Code Assembly Assembly Operating System Services Common Language Runtime JIT Compiler Native Code Managedcode UnmanagedComponent Perf. Counters MS.NETC#Zusammenfassung

19 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32.NET Performanzaspekte JIT (Just-In-Time) Kompilierung –Ausgangspunkt Plattformunabhängiger IL Code –Generelle Optimierung Constant folding, Method inlining, Loop unrolling, Common subexression elimination –Optimierung zur Laufzeit Lazy code selection, cache tuning, CPU spezifische Optimierung –Theoretisch: Performanter als statische Compiler –Manche Optimierungen aus Zeitgründen nicht möglich –Längere startup Zeiten der Applikationen ngen.exe + - Perf. Counters MS.NETC#Zusammenfassung

20 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32.NET Performanzaspekte SciMark Benchmark –Fast Fourier Transformations (FFT), Successive Over-Relaxation (SOR), Monte-Carlo Quadrat, Sparse Matrix Multiplikation, LU Matrix Dekomposition HW: 2.4GHz Pentium 4, 256 MB RAM MFLOP v MFLOP Architekturspez. Opt. Double-to-int cast (IA-32 SSE2) Perf. Counters MS.NETC#Zusammenfassung

21 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32.NET Performanzaspekte CLR – automatische Speicherverwaltung [1] Allocation pattern: GUT: Große Objekte, die am Programm- ende sterben Kleine, kurzlebige Objekte SCHLECHT: Viele Objekte überleben bis in Gen 2 und sterben alte Objekte referenzieren junge Objekte Perf. Counters MS.NETC#Zusammenfassung

22 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32.NET Performanzaspekte CLR – automatische Speicherverwaltung –Maß für Allocation Profile: Performance counter:.NET CLR Memory: %in GC GUT < 30% SCHLECHT > 30% Perf. Counters MS.NETC#Zusammenfassung

23 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32.NET Performanzaspekte Microsoft Shared Source CLI - Rotor ECMA-334 (C#) ECMA-335 (Common Language Infrastructure) Microsoft Windows® XP FreeBSD SSCLI: Perf. Counters MS.NETC#Zusammenfassung

24 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32 Weitere C# Tricks GC-freundliches Programmieren Boxing, Werte/Referenztypen, Zeiger, Loops

25 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32 Performanzaspekte von C# GC & StringBuilder: Perf. Counters MS.NETC#Zusammenfassung

26 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32 Performanzaspekte von C# Loops foreach vs. for = Eleganz vs. Performanz Perf. Counters MS.NETC#Zusammenfassung

27 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32 Performanzaspekte von C# SciMark HW: 2.4GHz Pentium 4, 256 MB RAM Perf. Counters MS.NETC#Zusammenfassung

28 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32Zusammenfassung Profiling: –Performance Counter MS.NET –CLR, GC, JIT C# Optimierungen –GC-freundliches Programmieren –Boxing, Werte/Referenztypen, Zeiger, Loops Perf. Counters MS.NETC#Zusammenfassung

29 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32Zusammenfassung MS.NET als High Performance Plattform –Werkzeuge zur Performanzmessung und Analyse –Ausdrucksstark –Einfach (Übersichtlich) –Effizienter Code –Plattformunabhängigkeit; Portabilität Perf. Counters MS.NETC#Zusammenfassung

30 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32Fragen Vielen Dank für die Aufmerksamkeit! Haben Sie noch Fragen?

31 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32 Wie geht es weiter auf der STC…?

32 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni / 32Ressourcen msdn.microsoft.com msnews.microsoft.com Rotor: [1] Performance Considerations for Run-Time Technologies in the.NET Framework A.NET Developer Platform White Paper; us/dndotnet/html/dotnetperftechs.asp


Herunterladen ppt "Performanz-orientierte Programmierung in C# Performanzaspekte von MS.NET Matej Ciesko Microsoft Student Partner Friedrich – Alexander Universität Erlangen."

Ähnliche Präsentationen


Google-Anzeigen