Programowanie równoległe Wojciech Grześkowiak2010/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 Moorea Liczba tranzystorów w układzie elektrycznym podwaja się co 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 ,238 s190,833 s27,779 s ,310 s63,875 s13,771 s ,674 s23,630 s7,030s 72556,375 s10,237 s3,511 s Tabela wyników:
Task Manager WG T1 T2 T3 T4 T5 T5 GLOBAL QUEUE 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 AsParallel() var q = from p in people.AsParallel() where p.age < MaxAge && p.age > MinAge && p.state == STATE order by age ascending select p; AsParallel() 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 asyncawait Nowe słowa kluczowe: async, await
Visual Studio Async CTP public void displayPageTitle() { var client = new WebClient(); client.DownloadStringCompleted += whenCompeted; client.DownloadStringAsync( new Uri(" } void whenCompleted(object sender, EventArgs e) { WriteLinePageTitle(e.Result); }
Visual Studio Async CTP public async void displayPageTitle() { WriteLinePageTitle( await new WebClient().DownloadStringTaskAsync( new Uri(" } public static Task DownloadStringTaskAsync( this WebClient webClient, Uri address);
Visual Studio Async CTP public async void displayPageTitle() { WriteLinePageTitle( await new WebClient().DownloadStringTaskAsync( new Uri(" WriteLinePageTitle( await new WebClient().DownloadStringTaskAsync( new Uri(" WriteLinePageTitle( await new WebClient().DownloadStringTaskAsync( new Uri(" }
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 MSDN MSDN Blogs Microsoft Professional Developers Conference Mój Blog
PYTANIA ?
DZIĘKUJE