2. 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
3. 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
5. 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
6. 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
7. 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.
SINGLE CORE
• Równoległość – wątki są wykonywanie fizycznie
równolegle na różnych jednostkach obliczeniowych
MULTI CORE
9. 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
11. Walk Tree
• Tabela wyników:
Wysokość Liczba Czas – Czas – Czas -
drzewa węzłów synchronicznie wątki 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
12. Task Manager
LQ
WG
LQ LQ
T6
WG WG T7
GLOBAL QUEUE
T5
T4 LQ
T3
T2 WG
T1
13. 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ść
15. Imperative Data Parallelism
• Parallel class
• Zbiór statycznych metod
• Metody pomocnicze do tworzenia Task’ów
• Realizacja podstawowych wzorców
• For
• ForEach
• Invoke
17. 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;
18. Visual Studio Async CTP
• Nowy model programowania asynchronicznego
• Zrezygnowanie z używania metod zwrotnych
• Nowe słowa kluczowe: async, await
19. 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);
}
20. 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);
21. 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")));
}
22. Kilka rad...
• Szukajmy w naszych aplikacjach niezależ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
23. Więcej informacji…
Channel 9
http://channel9.msdn.com/tags/Parallel+Extensions/
Microsoft Professional Developers Conference 2010
http://microsoftpdc.com
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/
Mój Blog
http://blog.fones.pl