320 likes | 520 Views
Performanz-orientierte Programmierung in C# Performanzaspekte von MS.NET. Matej Ciesko Microsoft Student Partner Friedrich – Alexander Universit ät Erlangen – Nürnberg matej.ciesko@stud.uni-erlangen.de. Einführung. Performanz-orientierte Programmierung Optimierung
E N D
Performanz-orientierte Programmierung in C#Performanzaspekte von MS.NET Matej Ciesko Microsoft Student Partner Friedrich – Alexander Universität Erlangen – Nürnberg matej.ciesko@stud.uni-erlangen.de
Einfü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: • Problem identifizieren • Problem evaluieren • Anwenden einer Optimierungstechnik Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
Agenda • Einführung • Performanzzähler (performance counters) • Nanosekunden Timer • MS.NET Profiling API • MS.NET – Performanzaspekte • CLR, JIT, CG • Performanzaspekte bei Entwicklung mit C# • Objekte (GC) • Datentypen • Sicherer/Unsicherer Code • … • Zusammenfassung
Ziele • Performanzaspekte des MS.NET • Messen von Performanzverhalten • Schreiben vom effizienten Code (C#) Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
Einführung Beispielapplikation: Matrix – Matrix Multiplikation C = A * B Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
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]; sum += a[i] Überprüfung Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
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 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
Einführung Beispielapplikation: ??? Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
Profiling Performanzzähler Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
Profiling Perf. Counters MS.NET C# Zusammenfassung • Fundamentale Prinzipien der Performanz-orientierten Programmierung: • Performanzziele setzen • Messen, messen und noch mehr messen • Optimieren • Profiling: Präzise Messung (von Zeit/Clock Ticks) von Hardware und/Applikation um Aussagen über Laufzeitverhalten von Applikation treffen zu können. • Hardwarezähler (performance counters) • Windows Performance Counters • MS.NET Profiler API Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
Profiling Perf. Counters MS.NET C# Zusammenfassung • 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(ReadTime 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 Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
Profiling Perf. Counters MS.NET C# Zusammenfassung • Windows Performance Counters • MS Windows API • perfmon.exe Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
Profiling Perf. Counters MS.NET C# Zusammenfassung • .NET CLR Profiling Services • speziell für Verhalten von .NET Applikationen • COM – Schnittstellen: ICorProfilerCallback ICorProfilerInfo • Profiler Design • COM Server Komponente implementieren • ICorProfilerCallback implementieren Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
Profiling Perf. Counters MS.NET C# Zusammenfassung • .NET CLR Profiling Services set Cor_Enable_Profiling = 0x1 set Cor_Profiler={FA0C6E77-AFF4-…992C} CLR Cor_Enable_Profiling = TRUE _myProfiler CoCreateInstance ICorProfilerCallback::Initialize Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
Profiling Perf. Counters MS.NET C# Zusammenfassung • Allocation Profiler (Demo) Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
Profiling Perf. Counters MS.NET C# Zusammenfassung • Allocation Profiler • Intel® VTune™ Performance Analyzer • Rational® PurifyPlus for Windows • Compuware® DevPartner Profiler Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
MS.NET Performanzaspekte Speicherverwaltung Compiler Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
.NET Performanzaspekte Perf. Counters MS.NET C# Zusammenfassung Source code Fortran C# C++ Unmanaged Component Compiler Compiler Compiler Managed code Assembly IL Code Assembly IL Code Assembly IL Code Common Language Runtime JIT Compiler Native Code Operating System Services Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
.NET Performanzaspekte Perf. Counters MS.NET C# Zusammenfassung • 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 + - Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
.NET Performanzaspekte Perf. Counters MS.NET C# Zusammenfassung • SciMark Benchmark • Fast Fourier Transformations (FFT), Successive Over-Relaxation (SOR), Monte-Carlo Quadrat, Sparse Matrix Multiplikation, LU Matrix Dekomposition v 1.1 + 54.1 MFLOP Architekturspez. Opt. Double-to-int cast (IA-32 SSE2) 300 200 MFLOP 100 0 1.0 1.1 HW: 2.4GHz Pentium 4, 256 MB RAM http://rotor.cs.cornell.edu/SciMark Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
.NET Performanzaspekte Perf. Counters MS.NET C# Zusammenfassung • CLR – automatische Speicherverwaltung • „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 [1] Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
.NET Performanzaspekte Perf. Counters MS.NET C# Zusammenfassung • CLR – automatische Speicherverwaltung • Maß für „Allocation Profile“: • Performance counter: .NET CLR Memory: %in GC GUT < 30% SCHLECHT > 30% Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
.NET Performanzaspekte Perf. Counters MS.NET C# Zusammenfassung Microsoft Shared Source CLI - „Rotor“ • ECMA-334 (C#) • ECMA-335 (Common Language Infrastructure) • Microsoft Windows® XP • FreeBSD SSCLI: www.sscli.net Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
Weitere C# Tricks GC-freundliches Programmieren Boxing, Werte/Referenztypen, Zeiger, Loops Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
Performanzaspekte von C# Perf. Counters MS.NET C# Zusammenfassung GC & StringBuilder: Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
Performanzaspekte von C# Perf. Counters MS.NET C# Zusammenfassung Loops foreach vs. for = Eleganz vs. Performanz Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
Performanzaspekte von C# Perf. Counters MS.NET C# Zusammenfassung SciMark HW: 2.4GHz Pentium 4, 256 MB RAM http://rotor.cs.cornell.edu/SciMark Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
Zusammenfassung Perf. Counters MS.NET C# Zusammenfassung • Profiling: • „Performance Counter“ • MS.NET • CLR, GC, JIT • C# Optimierungen • GC-freundliches Programmieren • Boxing, Werte/Referenztypen, Zeiger, Loops Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
Zusammenfassung Perf. Counters MS.NET C# Zusammenfassung • MS.NET als High Performance Plattform • Werkzeuge zur Performanzmessung und Analyse • Ausdrucksstark • Einfach (Übersichtlich) • Effizienter Code • Plattformunabhängigkeit; Portabilität Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
Fragen Vielen Dank für die Aufmerksamkeit! Haben Sie noch Fragen? Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
Wie geht es weiter auf der STC…? Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004
Ressourcen • www.studentconference.de • msdn.microsoft.com • www.microsoft.com/net • msnews.microsoft.com • Rotor: www.sscli.net [1] Performance Considerations for Run-Time Technologies in the .NET Framework A .NET Developer Platform White Paper; http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/dotnetperftechs.asp Performanz-orientierte Programmierung in C# STC 02. – 03. Juni 2004