Parallel Extension czyli programowanie równoległe != współbieżne na platformie .NET Framework 4.0 Wojciech Grześkowiak w.grzeskowiak@gmail.com
Agenda Rzut oka na rynek procesorów Idea programowania równoległego Pierwszy kontakt z Parallel Extension Task Parallel Library od kuchni LINQ po raz drugi Podsumowanie
Rynek procesorów Prawo Moore’a Liczba tranzystorów w układzie elektrycznym podwaja się co 18-24 miesiące. Kres procesorów jednordzeniowych Alternatywa: Procesory wielordzeniowe
Rynek procesorów Intel™
Procesory wielordzeniowe "Różnica jest taka jak między szybkim sportowym autem, a autobusem szkolnym. Pierwszy szybko przewiezie dwie osoby, a drugi, choć trochę wolniej - czterdzieści„ – Dan Reed
Przyszłość … Analitycy z firmy Forrester Research przewidują, że już w 2012 roku rozbudowane procesory wyposażone w 64 rdzenie będą instalowane w komputerach domowych. Już niedługo zabraknie programistów z doświadczeniem w tworzeniu aplikacji wykorzystujących przetwarzanie równoległe. – Dan Reed … To już ostatni dzwonek, aby przekonać młodych programistów o wartości przetwarzania równoległego - dodaje
Równoległe != Współbieżne Współbieżność – wykonywane wątki są przełączane co pewien ustalony (krotki) czas, przez co mamy wrażenie równoległego ich wykonywania. SINGLE CORE Równoległość – wątki są wykonywanie fizycznie równolegle na różnych jednostkach obliczeniowych MULTI CORE
DEMO Ray Tracing
Parallel Extension Biblioteka .NET napisana w C# Lekkie środowisko uruchomieniowe Wsparcie wielowątkowości Wspólny model wyjątków Wejdzie w skład mscorlib w przyszłej wersji platformy
Walk Tree Imperative Task Parallelism DEMO Walk Tree Imperative Task Parallelism
Task Manager LQ WG LQ LQ T6 T7 T5 LQ T4 GLOBAL QUEUE T3 T2 T1
Imperative Task Parallelism Task zamiast Thread Zalety Brak nakładu związanego z przełączaniem kontekstu Mniejsze zużycie pamięci Równomierny rozkład pracy Skalowalność
Matrix Imperative Data Parallelism DEMO Matrix Imperative Data Parallelism
Imperative Data Parallelism Parallel class Zbiór statycznych metod Metody pomocnicze do tworzenia Task’ów Realizacja podstawowych wzorców For ForEach Invoke
Prime Numbers Declarative Data Parallelism DEMO Prime Numbers Declarative Data Parallelism
Declarative Data Parallelism PLINQ to „Równoległy” Linq to Objects N – krotny wzrost wydajności Minimalny wpływ na dotychczasowy Linq var q = from p in people.AsParallel() where p.age < MaxAge && p.age > MinAge && p.state == STATE order by age ascending select p;
Kilka rad... Szukajmy w naszych aplikacjach nie zależnych zadań i uruchamiajmy je równolegle. np. rekurencja Unikajmy synchronizacji Operacje wykonywane równolegle powinny być czasochłonne. Przekształcajmy jedynie pętle zewnętrzne
(video) Literatura Channel 9 http://channel9.msdn.com/tags/Parallel+Extensions/ http://channel9.msdn.com/tags/pdc2008.parallelism/ MSDN http://msdn.microsoft.com/en-us/concurrency/ MSDN Blogs http://blogs.msdn.com/pfxteam http://blogs.msdn.com/nativeconcurrency http://www.danielmoth.com/Blog/ http://www.bluebytesoftware.com/blog/ Microsoft Connect https://connect.microsoft.com/VisualStudio/