bernd marquardt software+consulting. einführung download, voraussetzungen, installation...
TRANSCRIPT
![Page 1: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/1.jpg)
Parallel Extensions for the .NET Framework
Bernd MarquardtSoftware+Consulting
![Page 2: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/2.jpg)
AgendaEinführungDownload, Voraussetzungen, InstallationParallelerweiterungen für das FrameworkSchleifen parallelisierenCodeblöcke parallelisierenTipps und Tricks
Was geht und was geht nicht?Beispiele und Performance
![Page 3: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/3.jpg)
Agenda
Environment-VariablenDie Klasse TaskDie Klasse FutureConcurrent ExceptionsSynchronisierungZusammenfassung
![Page 4: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/4.jpg)
Einführung
Bisher: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: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/5.jpg)
Einführung
Intel Clock SpeedQuelle: Intel, Wikipedia
![Page 6: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/6.jpg)
Einführung
Prozessor-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: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/7.jpg)
Einführung
Programmierung 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: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/8.jpg)
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: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/9.jpg)
Einführung
Möglichkeiten und Anwendungsbereiche der Multithreading-Technologie:
Verkürzung der Antwortzeiten einer AnwendungErhö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)
![Page 10: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/10.jpg)
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: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/11.jpg)
Einführung
ACHTUNG:
Normale Multithread-Programmierung ist NICHT einfach!
Höherer AufwandDebuggingFehlersucheTestingSynchronisierungPlanung
![Page 12: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/12.jpg)
Download
Download CTP unter:http://www.microsoft.com/downloads/details.aspx?FamilyId=348F73FD-593D-4B3C-B055-694C50D2B0F3&displaylang=en
Google-Suche:Task Parallel Library Download
Visual Studio 2010 beta
![Page 13: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/13.jpg)
Voraussetzungen
Ideal 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: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/14.jpg)
Installation
Nur mit Visual Studio 2008.NET Framework 3.5
Betriebssystem:Windows Server 2003Windows XPWindows VistaWindows 7
![Page 15: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/15.jpg)
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: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/16.jpg)
Demo 3
demo
![Page 17: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/17.jpg)
Schleifen parallelisieren
Wichtige Klasse:System.Threading.Parallel
Schleifen 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: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/18.jpg)
Demo 4, Demo 5, Demo 6
demo
![Page 19: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/19.jpg)
Schleifen parallelisierenAchtung: Was passiert mit sogenannten unausgewogenen“ Schleifen?Beispiel:for(int i = 0; i < 1000; i++){ if(i < 500) { DoLongCalculation(); } else { DoShortCalculation(); }}
![Page 20: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/20.jpg)
Schleifen parallelisieren
Schleifen 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: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/21.jpg)
Aggregationen
Zusammenfassen von ErgebnissenAchtung: Meistens ist Locking erforderlichTypischer Anwendungsfall:
double dSum = 0.0;
for(int i = 0; i < 1000; i++){ dSum += Math.Sqrt(i);}
![Page 22: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/22.jpg)
Aggregationen
Zwischenwerte 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: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/23.jpg)
Aggregationen
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); });
![Page 24: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/24.jpg)
Agg 1, Agg 2
demo
![Page 25: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/25.jpg)
Codeblöcke parallelisieren
Unabhä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: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/26.jpg)
Demo 7, Demo 8
demo
![Page 27: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/27.jpg)
Tipps und Tricks
Parallel.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: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/28.jpg)
Beispiele und Performance
Innere und äußere SchleifeSchleifendurchläufe mit stark unterschiedlicher DauerMatrixmultiplikationPrimzahlen berechnen
![Page 29: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/29.jpg)
InnerOuter, MatMult, PrimesStd, PrimesPar
demo
![Page 30: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/30.jpg)
Performance MatMult
Größ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: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/31.jpg)
Environment-Variablen
PLINQ_DOPDOP = degree of parallelism
PLINQ_DOP = 1Ein Thread wird benutzt
PLINQ_DOP = 8Acht 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…
![Page 32: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/32.jpg)
Die Klasse Task
Die 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: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/33.jpg)
Die Klasse Task
Wichtige Features:Synchronisierung von parallelen AusführungseinheitenAbbrechen von Ausführungseinheiten
Benutzung wie normale ThreadsSynchronisierung, Abbruch,…
![Page 34: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/34.jpg)
Demo 10, Demo 12
demo
![Page 35: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/35.jpg)
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: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/36.jpg)
Demo 13, Demo 14, FutureWinForms, …WPF
demo
![Page 37: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/37.jpg)
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: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/38.jpg)
Concurrent Exceptions
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 - angehaltenAchtung: In dieser Zeit können eventuell noch weitere Exceptions auftreten!
![Page 39: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/39.jpg)
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: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/40.jpg)
Concurrent Exceptions
Welche Klassen werfen AggregateException-Objekte?
Die Parallel-KlasseDie Task-KlasseDie Future-KlasseParallel LINQ (Abfragen)
![Page 41: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/41.jpg)
Demo 15
demo
![Page 42: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/42.jpg)
Synchronisierung
BarrierCountDownEventLazyInit<T>ManualResetEventSlimSemaphoreSlimSpinLockSpinWaitWriteOnce<T>Collections
![Page 43: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/43.jpg)
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: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/44.jpg)
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: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/45.jpg)
Your MSDN resourcescheck out these websites, blogs & more!
PresentationsTechDays: 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: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/46.jpg)
Your TechNet resourcescheck out these websites, blogs & more!
PresentationsTechDays: www.techdays.ch
TechNet EventsTechNet 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: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/47.jpg)
Save the date for tech·days next year!
7. – 8. April 2010Congress Center Basel
![Page 48: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/48.jpg)
Classic Sponsoring Partners
Media Partner
Premium Sponsoring Partners
![Page 49: Bernd Marquardt Software+Consulting. Einführung Download, Voraussetzungen, Installation Parallelerweiterungen für das Framework Schleifen parallelisieren](https://reader035.vdocuments.pub/reader035/viewer/2022081513/55204d7d49795902118cd609/html5/thumbnails/49.jpg)