programowanie równolegle - parallel extensions
DESCRIPTION
Prezentacja z 2010 roku nt programowania równoległego przy pomocy rozwiązania Parallel Extensions.TRANSCRIPT
Programowanie równoległe
Wojciech Grześkowiak 2010/11/12
Agenda
• Rynek procesorów • Idea programowania równoległego • Parallel Extensions na platformie .NET • Task Parallel Library od kuchni • Parallel LINQ • Visual Studio Async CTP • Podsumowanie • Bibliografia • Pytania
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™
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
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
Równoległe a 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.
• Równoległość – wątki są wykonywanie fizycznie równolegle na różnych jednostkach obliczeniowych
SINGLE CORE
MULTI CORE
DEMO
Ray Tracing
Parallel Extension
• Biblioteka .NET napisana w C#
• Przenośne, lekkie środowisko uruchomieniowe
• Wsparcie wielowątkowości
• Wspólny model wyjątków
Nowość na platformie .NET w wersji 4.0
DEMO
Tree Walk
Walk Tree
Wysokość
drzewa
Liczba
węzłów
Czas –
synchronicznie
Czas –
wątki
Czas -
równolegle
10 2047 49,238 s 190,833 s 27,779 s
9 1023 25,310 s 63,875 s 13,771 s
8 511 12,674 s 23,630 s 7,030s
7 255 6,375 s 10,237 s 3,511 s
• Tabela wyników:
Task Manager
WG
WG
WG
WG
T1
T2
T3
T4
T5
GL
OB
AL
QU
EU
E
LQ
LQ
LQ
LQ
T7 T6
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ść
Mnożenie macierzy
DEMO
Imperative Data Parallelism
• Parallel class
• Zbiór statycznych metod
• Metody pomocnicze do tworzenia Task’ów
• Realizacja podstawowych wzorców
• For • ForEach • Invoke
Liczby pierwsze
DEMO
Declarative Data Parallelism
• PLINQ to „Równoległy” Linq to Objects
• Prawie 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;
Visual Studio Async CTP
• Nowy model programowania asynchronicznego
• Zrezygnowanie z używania metod zwrotnych
• Nowe słowa kluczowe: async, await
Visual Studio Async CTP
public void displayPageTitle() { var client = new WebClient(); client.DownloadStringCompleted += whenCompeted; client.DownloadStringAsync( new Uri("http://www.pw.edu.pl")); } void whenCompleted(object sender, EventArgs e) { WriteLinePageTitle(e.Result); }
Visual Studio Async CTP
public async void displayPageTitle() { WriteLinePageTitle( await new WebClient().DownloadStringTaskAsync( new Uri("http://www.pw.edu.pl"))); }
public static Task<string> DownloadStringTaskAsync( this WebClient webClient, Uri address);
Visual Studio Async CTP
public async void displayPageTitle() { WriteLinePageTitle( await new WebClient().DownloadStringTaskAsync( new Uri("http://www.pw.edu.pl"))); WriteLinePageTitle( await new WebClient().DownloadStringTaskAsync( new Uri("http://www.elka.pw.edu.pl"))); WriteLinePageTitle( await new WebClient().DownloadStringTaskAsync( new Uri("http://www.samsung.com"))); }
Kilka rad...
• Operacje wykonywane równolegle powinny być czasochłonne.
• Przekształcajmy jedynie pętle zewnętrzne
• Szukajmy w naszych aplikacjach niezależnych
zadań i uruchamiajmy je równolegle. np.
rekurencja
• Unikajmy synchronizacji
Więcej informacji…
Channel 9
http://channel9.msdn.com/tags/Parallel+Extensions/
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 Professional Developers Conference 2010
http://microsoftpdc.com
Mój Blog
http://blog.fones.pl
PYTANIA ?
DZIĘKUJE