Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren.

Ähnliche Präsentationen


Präsentation zum Thema: "Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren."—  Präsentation transkript:

1 Bernd Marquardt Software+Consulting

2 Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren Codeblöcke parallelisieren Tipps und Tricks Was geht und was geht nicht? Beispiele und Performance

3 Environment-Variablen Die Klasse Task Die Klasse Future Concurrent Exceptions Synchronisierung Zusammenfassung

4 Bisher: Alle 2-3 Jahre wurden die CPUs doppelt so schnell Davon haben unsere Programme automatisch etwas Deutlich sichtbar bei mathematischen Berechnungen, weniger sichtbar bei UI- Angelegenheiten Performance-optimiertes Programmieren wird in Zukunft immer wichtiger werden!

5 Intel Clock Speed Quelle: Intel, Wikipedia

6 Prozessor-Takt bleibt bei 3 – 4 GHz stehen Mehr geht nicht: Kühlung wird schwierig Eigentlich müssten unsere CPUs jetzt ca. 50 GHz können Anzahl der Transistoren auf einem Chip steigt aber weiter an Resultat: Multi-Core CPUs kommen immer stärker Mehrere CPUs auf einem Chip

7 Programmierung für Multi-Core CPUs 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- CPUs Performance- und Parallel-Überlegungen kommen also jetzt in Mode

8 Aber Achtung: Bei mehreren PROZESSEN haben wir automatisch etwas von den Mehrkernprozessoren Wenn wir in EINER ANWENDUNG alle Kerne ausnutzen wollen, müssen wir etwas dafür programmieren

9 Möglichkeiten und Anwendungsbereiche der Multithreading-Technologie: Verkürzung der Antwortzeiten einer Anwendung Erhöhung des Durchsatzes einer Anwendung …das geht auch auf Single-Core-Systemen Erhöhung der Performance der Berechnungen in einer Anwendung …das geht nur durch Parallelprogrammierung auf Multi-Core-Systemen (mit einigen kleinen Ausnahmen)

10 Andere Parallelisierungs-Technologien: Multithreading, Threadpool Managed 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.NET Task Parallel Library (TPL) Eine Erweiterung für.NET-Sprachen Nur managed Code

11 ACHTUNG: Normale Multithread-Programmierung ist NICHT einfach! Höherer Aufwand Debugging Fehlersuche Testing Synchronisierung Planung

12 Download CTP unter: px?FamilyId=348F73FD-593D-4B3C-B C50D2B0F3&displaylang=en Google-Suche: Task Parallel Library Download Visual Studio 2010 beta

13 Ideal ist ein Rechner mit mehreren Prozessoren Gut zum Testen (mit und ohne Parallelisierung) Geschwindigkeit (Taktfrequenz) spielt beim Testen eher eine untergeordnete Rolle Normal RAM (VS 2008) Ein bisschen Festplatte

14 Nur mit Visual Studio 2008.NET Framework 3.5 Betriebssystem: Windows Server 2003 Windows XP Windows Vista Windows 7

15 Es gibt zwei Möglichkeiten: System.Linq.ParallelEnumerable-Klasse AsParallel-Erweiterungsmethode Ziel: Parallele Datenabfragen mit LINQ Sehr einfach WAS-Programmierung statt WIE- Programmierung Hinweis: Referenz auf System.Threading.Dll einfügen

16

17 Wichtige Klasse: System.Threading.Parallel Schleifen werden aufgeteilt auf mehrere Threads Das geht nur, wenn die einzelnen Schleifendurchläufe unabhängig voneinander sind Problem z.B.: a[i] = a[i – 1] * 2 Indices in der Schleife müssen gleich sein Parallel.For und Parallel.ForEach

18

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

20 Schleifen werden nicht einfach halbiert Es werden kleine Bröckchen gemacht Sobald ein Thread fertig ist, bekommt er den nächsten Happen, bis die Arbeit komplett erledigt ist

21 Zusammenfassen von Ergebnissen Achtung: Meistens ist Locking erforderlich Typischer Anwendungsfall: double dSum = 0.0; for(int i = 0; i < 1000; i++) { dSum += Math.Sqrt(i); }

22 Zwischenwerte werden über sog. ThreadLocalState weitergegeben Ablauf: Vor der Schleifenabarbeitung: LocalState initialisieren Schleife abarbeiten: Im Thread rechnen, LocalState benutzen Nach der Schleifenabarbeitung: Aggregation (Zusammenfassung) der Ergebnisse (Achtung: Locking!!!)

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

24

25 Unabhängiger Code kann parallel ausgeführt werden Häufigstes Problem: Gleichzeitiger Zugriff auf die gleichen Daten (schreibend) Ohne Nachdenken geht da gar nichts! Wichtige Methode: Parallel.Invoke

26

27 Parallel.For und Parallel.ForEach: (Anzahl der Durchläufe * Dauer) muss groß genug sein Normalerweise sollte man die äußere Schleife parallelisieren Nicht zu viele Tasks erzeugen Möglichst wenig Synchronisierung verwenden Nicht vergessen: Amdahls Gesetz!

28 Innere und äußere Schleife Schleifendurchläufe mit stark unterschiedlicher Dauer Matrixmultiplikation Primzahlen berechnen

29

30 Größe SequentiellParallel ms ms ms ms ms ms ms

31 PLINQ_DOP DOP = degree of parallelism PLINQ_DOP = 1 Ein Thread wird benutzt PLINQ_DOP = 8 Acht Threads werden benutzt Wenn 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…

32 Die Task-Klasse wird benötigt, um erweiterte Parallelisierungprobleme zu lösen Vergleichbar mit der ThreadPool-Klasse: …ist ähnlich wie: ThreadPool.QueueUserWorkItem(delegate { … }); Task.Create(delegate { … });

33 Wichtige Features: Synchronisierung von parallelen Ausführungseinheiten Abbrechen von Ausführungseinheiten Benutzung wie normale Threads Synchronisierung, Abbruch,…

34

35 Die Future-Klasse ist abgeleitet von der Task-Klasse Sie 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 ist Sonst wird gewartet…. = Synchronisierung Kann man Future-Variablen in Anwendungen mit einer Benutzerschnittstelle benutzen?

36

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

38 Paralleler 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 - angehalten Achtung: In dieser Zeit können eventuell noch weitere Exceptions auftreten!

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

40 Welche Klassen werfen AggregateException-Objekte? Die Parallel-Klasse Die Task-Klasse Die Future-Klasse Parallel LINQ (Abfragen)

41

42 Barrier CountDownEvent LazyInit ManualResetEventSlim SemaphoreSlim SpinLock SpinWait WriteOnce Collections

43 Es gibt neue Möglichkeiten, um Code zu parallelisieren Wir müssen keine Threads mehr explizit erzeugen Schleifen sind einfach zu parallelsieren Code ist besser zu lesen, als mit einzelnen Threads Auch Codeblöcke kann man einfach paralellisieren

44 Trotzdem gibt es Fälle, bei denen eine Parallelisierung nichts bringt Testen, Prototyp erstellen Ggf. seriellen Code verwenden Die Klassen Task und Future ermöglichen die präzisere Steuerung des parallelen Codes Parallel Linq bietet einfachere Möglichkeiten der parallelen Programmierung, als die bisherige Anwendung von normalen Threads

45 Presentations TechDays: MSDN Events: MSDN Webcasts: MSDN Events MSDN Events: Save the date: TechEd 2009 Europe, 9-13 November 2009, Berlinhttp://www.microsoft.com/switzerland/msdn/de/events/default.mspx MSDN Flash (our by weekly newsletter) Subscribe: MSDN Team Blog RSS: Developer User Groups & Communities Mobile Devices: Microsoft Solutions User Group Switzerland: Managed User Group of Switzerland: FoxPro User Group Switzerland:

46 Presentations TechDays: TechNet Events TechNet Events: Save the date: TechEd 2009 Europe, 9-13 November 2009, Berlinhttp://technet.microsoft.com/de-ch/bb aspx TechNet Flash (our by weekly newsletter) Subscribe: Schweizer IT Professional und TechNet Blog RSS: IT Professional User Groups & Communities SwissITPro User Group: NT Anwendergruppe Schweiz: PASS (Professional Association for SQL Server):

47 7. – 8. April 2010 Congress Center Basel

48 Classic Sponsoring Partners Media Partner Premium Sponsoring Partners

49


Herunterladen ppt "Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren."

Ähnliche Präsentationen


Google-Anzeigen