49
Parallel Extensions for the .NET Framework Bernd Marquardt Software+Consulting

Parallel Extensions for the .NET Framework

  • Upload
    iola

  • View
    45

  • Download
    0

Embed Size (px)

DESCRIPTION

Parallel Extensions for the .NET Framework. Bernd Marquardt Software+Consulting. Agenda. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren Codeblöcke parallelisieren Tipps und Tricks Was geht und was geht nicht? - PowerPoint PPT Presentation

Citation preview

Page 1: Parallel Extensions for the .NET Framework

Parallel Extensions for the .NET FrameworkBernd MarquardtSoftware+Consulting

Page 2: Parallel Extensions for the .NET Framework

AgendaEinführungDownload, Voraussetzungen, InstallationParallelerweiterungen für das FrameworkSchleifen parallelisierenCodeblöcke parallelisierenTipps und Tricks

Was geht und was geht nicht?Beispiele und Performance

Page 3: Parallel Extensions for the .NET Framework

AgendaEnvironment-VariablenDie Klasse TaskDie Klasse FutureConcurrent ExceptionsSynchronisierungZusammenfassung

Page 4: Parallel Extensions for the .NET Framework

EinführungBisher:Alle 2-3 Jahre wurden die CPU‘s doppelt so schnell

Davon haben unsere Programme automatisch etwasDeutlich sichtbar bei mathematischen Berechnungen, weniger sichtbar bei UI-Angelegenheiten

Performance-optimiertes Programmieren wird in Zukunft immer wichtiger werden!

Page 5: Parallel Extensions for the .NET Framework

Einführung

Intel Clock SpeedQuelle: Intel, Wikipedia

Page 6: Parallel Extensions for the .NET Framework

EinführungProzessor-Takt bleibt bei 3 – 4 GHz stehen

Mehr geht nicht: Kühlung wird schwierigEigentlich müssten unsere CPU‘s jetzt ca. 50 GHz können

Anzahl der Transistoren auf einem Chip steigt aber weiter an

Resultat: Multi-Core CPU‘s kommen immer stärkerMehrere CPU‘s auf einem Chip

Page 7: Parallel Extensions for the .NET Framework

EinführungProgrammierung für Multi-Core CPU‘s

Multi-Processing (gibt uns das Betriebssystem)Multi-Threading (müssen wir im Moment noch selbst programmieren)

Wir müssen unsere Programme anpassen, sonst haben wir nichts von den Multi-Core- CPU‘sPerformance- und Parallel-Überlegungen „kommen also jetzt in Mode“

Page 8: Parallel Extensions for the .NET Framework

EinführungAber Achtung:

Bei mehreren PROZESSEN haben wir automatisch etwas von den MehrkernprozessorenWenn wir in EINER ANWENDUNG alle Kerne ausnutzen wollen, müssen wir etwas dafür programmieren

Page 9: Parallel Extensions for the .NET Framework

EinführungMöglichkeiten und Anwendungsbereiche der Multithreading-Technologie:

Verkürzung der Antwortzeiten einer AnwendungErhöhung des Durchsatzes einer Anwendung

…das geht auch auf Single-Core-SystemenErhöhung der Performance der Berechnungen in einer Anwendung

…das geht nur durch Parallelprogrammierung auf Multi-Core-Systemen(mit einigen kleinen Ausnahmen)

Page 10: Parallel Extensions for the .NET Framework

EinführungAndere Parallelisierungs-Technologien:

Multithreading, ThreadpoolManaged und unmanaged Code

OpenMP (C, C++, FORTRAN)Managed und unmanaged Code

MPI und MPI.NET (Message Passing Interface) (C, C++, FORTRAN, .NET)

NEU: Parallel Extensions for .NETTask Parallel Library (TPL)Eine Erweiterung für .NET-SprachenNur managed Code

Page 11: Parallel Extensions for the .NET Framework

EinführungACHTUNG:

Normale Multithread-Programmierung ist NICHT einfach!

Höherer AufwandDebuggingFehlersucheTestingSynchronisierungPlanung

Page 13: Parallel Extensions for the .NET Framework

VoraussetzungenIdeal ist ein Rechner mit mehreren Prozessoren

Gut zum Testen (mit und ohne Parallelisierung)

Geschwindigkeit (Taktfrequenz) spielt beim Testen eher eine untergeordnete RolleNormal RAM (VS 2008)Ein bisschen Festplatte

Page 14: Parallel Extensions for the .NET Framework

InstallationNur mit Visual Studio 2008.NET Framework 3.5

Betriebssystem:Windows Server 2003Windows XPWindows VistaWindows 7

Page 15: Parallel Extensions for the .NET Framework

Parallelerweiterungen für Linq

Es gibt zwei Möglichkeiten:System.Linq.ParallelEnumerable-KlasseAsParallel-Erweiterungsmethode

Ziel: Parallele Datenabfragen mit LINQSehr einfachWAS-Programmierung statt WIE-ProgrammierungHinweis: Referenz auf System.Threading.Dll einfügen

Page 16: Parallel Extensions for the .NET Framework

Demo 3

demo

Page 17: Parallel Extensions for the .NET Framework

Schleifen parallelisierenWichtige Klasse:

System.Threading.ParallelSchleifen werden aufgeteilt auf mehrere ThreadsDas geht nur, wenn die einzelnen Schleifendurchläufe unabhängig voneinander sind

Problem z.B.: a[i] = a[i – 1] * 2Indices in der Schleife müssen „gleich“ sein

Parallel.For und Parallel.ForEach

Page 18: Parallel Extensions for the .NET Framework

Demo 4, Demo 5, Demo 6demo

Page 19: Parallel Extensions for the .NET Framework

Schleifen parallelisierenAchtung: Was passiert mit sogenannten unausgewogenen“ Schleifen?Beispiel:for(int i = 0; i < 1000; i++){ if(i < 500) { DoLongCalculation(); } else { DoShortCalculation(); }}

Page 20: Parallel Extensions for the .NET Framework

Schleifen parallelisierenSchleifen werden nicht einfach „halbiert“Es werden „kleine Bröckchen“ gemachtSobald ein Thread fertig ist, bekommt er den nächsten Happen, bis die Arbeit komplett erledigt ist

Page 21: Parallel Extensions for the .NET Framework

AggregationenZusammenfassen von ErgebnissenAchtung: Meistens ist Locking erforderlichTypischer Anwendungsfall:double dSum = 0.0;

for(int i = 0; i < 1000; i++){ dSum += Math.Sqrt(i);}

Page 22: Parallel Extensions for the .NET Framework

AggregationenZwischenwerte werden über sog. ThreadLocalState weitergegebenAblauf:

Vor der Schleifenabarbeitung: LocalState initialisierenSchleife abarbeiten: Im Thread rechnen, LocalState benutzenNach der Schleifenabarbeitung: Aggregation (Zusammenfassung) der Ergebnisse (Achtung: Locking!!!)

Page 23: Parallel Extensions for the .NET Framework

Aggregationenint iSum = 0;

Parallel.For(0, 1000, // From, To () => 0, // Init (i, state) => { // Loop body state.ThreadLocalState += i; }, (partSum) => { // Aggregation Interlocked.Add(ref iSum, partSum); });

Page 24: Parallel Extensions for the .NET Framework

Agg 1, Agg 2

demo

Page 25: Parallel Extensions for the .NET Framework

Codeblöcke parallelisierenUnabhängiger Code kann parallel ausgeführt werdenHäufigstes Problem: Gleichzeitiger Zugriff auf die gleichen Daten (schreibend)Ohne Nachdenken geht da gar nichts!Wichtige Methode: Parallel.Invoke

Page 26: Parallel Extensions for the .NET Framework

Demo 7, Demo 8

demo

Page 27: Parallel Extensions for the .NET Framework

Tipps und TricksParallel.For und Parallel.ForEach:

(Anzahl der Durchläufe * Dauer) muss groß genug seinNormalerweise sollte man die äußere Schleife parallelisieren

Nicht zu viele Tasks erzeugenMöglichst wenig Synchronisierung verwendenNicht vergessen: Amdahl‘s Gesetz!

Page 28: Parallel Extensions for the .NET Framework

Beispiele und PerformanceInnere und äußere SchleifeSchleifendurchläufe mit stark unterschiedlicher DauerMatrixmultiplikationPrimzahlen berechnen

Page 29: Parallel Extensions for the .NET Framework

InnerOuter, MatMult, PrimesStd, PrimesPar

demo

Page 30: Parallel Extensions for the .NET Framework

Performance MatMultGröße Sequentiell Parallel5 0.0017 0.0223 ms10 0.0111 0.0254 ms25 0.1687 0.1830 ms50 1.3953 1.2970 ms100 11.207 9.300 ms250 185.41 94.81 ms500 1950.8 978.0 ms

Page 31: Parallel Extensions for the .NET Framework

Environment-VariablenPLINQ_DOP

DOP = degree of parallelismPLINQ_DOP = 1

Ein Thread wird benutztPLINQ_DOP = 8

Acht Threads werden benutztWenn PLINQ_DOP > Prozessoren * Kerne, dann gibt es mehr Threads, als gleichzeitig benutzt werden können

Vorteil: Wenn ein laufender Thread in den Wartezustand geht, kann ein anderer laufen…

Page 32: Parallel Extensions for the .NET Framework

Die Klasse TaskDie Task-Klasse wird benötigt, um erweiterte Parallelisierungprobleme zu lösenVergleichbar mit der ThreadPool-Klasse:

…ist ähnlich wie:

ThreadPool.QueueUserWorkItem(delegate { … });

Task.Create(delegate { … });

Page 33: Parallel Extensions for the .NET Framework

Die Klasse TaskWichtige Features:

Synchronisierung von parallelen AusführungseinheitenAbbrechen von Ausführungseinheiten

Benutzung wie normale ThreadsSynchronisierung, Abbruch,…

Page 34: Parallel Extensions for the .NET Framework

Demo 10, Demo 12

demo

Page 35: Parallel Extensions for the .NET Framework

Die Klasse FutureDie Future-Klasse ist abgeleitet von der Task-KlasseSie ermöglicht die asynchrone Berechnung von Daten

Wenn später dann die berechneten Daten weiter benutzt werden sollen, wird geprüft, ob die Berechnung bereits abgeschlossen istSonst wird gewartet…. = Synchronisierung

Kann man Future-Variablen in Anwendungen mit einer Benutzerschnittstelle benutzen?

Page 36: Parallel Extensions for the .NET Framework

Demo 13, Demo 14, FutureWinForms, …WPF

demo

Page 37: Parallel Extensions for the .NET Framework

Concurrent ExceptionsIn normalen, sequentiellen Anwendungen kann zu einer bestimmten Zeit maximal EINE Exception geworfen werdenBei parallelen Anwendungen können auch mehrere Exceptions geworfen werdenOft werden die Exceptions dann auch noch in einem anderen Thread verarbeitet, als in dem Thread, in dem sie geworfen wurden

Page 38: Parallel Extensions for the .NET Framework

Concurrent ExceptionsParalleler Code – Problem:

Reihenfolge, mehrere Exceptions!!Darum gibt es einen anderen Exception-Mechanismus in den Parallel Extensions Wenn eine Exception im Parallel-Code auftritt, werden alle Threads - so schnell wie möglich - angehaltenAchtung: In dieser Zeit können eventuell noch weitere Exceptions auftreten!

Page 39: Parallel Extensions for the .NET Framework

Concurrent ExceptionsAlle aufgetretenen Exceptions werden in einem Objekt der Klasse System.Threading.AggregateException eingesammeltWenn alle Threads angehalten sind, dann wird die AggregateException neu geworfen und kann bearbeitet werdenDie einzelnen Exceptions können über das Property InnerExceptions abgefragt werden (eine Collection der aufgetretenen Exceptions)

Page 40: Parallel Extensions for the .NET Framework

Concurrent ExceptionsWelche Klassen werfen AggregateException-Objekte?

Die Parallel-KlasseDie Task-KlasseDie Future-KlasseParallel LINQ (Abfragen)

Page 41: Parallel Extensions for the .NET Framework

Demo 15

demo

Page 42: Parallel Extensions for the .NET Framework

SynchronisierungBarrierCountDownEventLazyInit<T>ManualResetEventSlimSemaphoreSlimSpinLockSpinWaitWriteOnce<T>Collections

Page 43: Parallel Extensions for the .NET Framework

ZusammenfassungEs gibt neue Möglichkeiten, um Code zu parallelisierenWir müssen keine Threads mehr explizit erzeugenSchleifen sind einfach zu parallelsierenCode ist besser zu lesen, als mit einzelnen ThreadsAuch Codeblöcke kann man einfach paralellisieren

Page 44: Parallel Extensions for the .NET Framework

ZusammenfassungTrotzdem gibt es Fälle, bei denen eine Parallelisierung nichts bringt

Testen, Prototyp erstellenGgf. seriellen Code verwenden

Die Klassen Task und Future ermöglichen die präzisere Steuerung des parallelen CodesParallel Linq bietet einfachere Möglichkeiten der parallelen Programmierung, als die bisherige Anwendung von normalen Threads

Page 45: Parallel Extensions for the .NET Framework

Your MSDN resourcescheck out these websites, blogs & more!Presentations

TechDays: www.techdays.chMSDN Events: http://www.microsoft.com/switzerland/msdn/de/presentationfinder.mspxMSDN Webcasts: http://www.microsoft.com/switzerland/msdn/de/finder/default.mspx

MSDN EventsMSDN Events: http://www.microsoft.com/switzerland/msdn/de/events/default.mspxSave the date: Tech•Ed 2009 Europe, 9-13 November 2009, Berlin

MSDN Flash (our by weekly newsletter)Subscribe: http://www.microsoft.com/switzerland/msdn/de/flash.mspx

MSDN Team BlogRSS: http://blogs.msdn.com/swiss_dpe_team/Default.aspx

Developer User Groups & CommunitiesMobile Devices: http://www.pocketpc.ch/Microsoft Solutions User Group Switzerland: www.msugs.ch.NET Managed User Group of Switzerland: www.dotmugs.chFoxPro User Group Switzerland: www.fugs.ch

Page 46: Parallel Extensions for the .NET Framework

Your TechNet resourcescheck out these websites, blogs & more!Presentations

TechDays: www.techdays.chTechNet Events

TechNet Events: http://technet.microsoft.com/de-ch/bb291010.aspx Save the date: Tech•Ed 2009 Europe, 9-13 November 2009, Berlin

TechNet Flash (our by weekly newsletter)Subscribe: http://technet.microsoft.com/de-ch/bb898852.aspx

Schweizer IT Professional und TechNet BlogRSS: http://blogs.technet.com/chitpro-de/

IT Professional User Groups & CommunitiesSwissITPro User Group: www.swissitpro.ch NT Anwendergruppe Schweiz: www.nt-ag.ch PASS (Professional Association for SQL Server): www.sqlpass.ch

Page 47: Parallel Extensions for the .NET Framework

Save the date for tech·days next year!7. – 8. April 2010Congress Center Basel

Page 48: Parallel Extensions for the .NET Framework

Classic Sponsoring Partners

Media Partner

Premium Sponsoring Partners

Page 49: Parallel Extensions for the .NET Framework