250 likes | 388 Views
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.
E N D
Programowanie równoległe Wojciech Grześkowiak 2010/11/12
Agenda • Rynek procesorów • Idea programowania równoległego • ParallelExtensions na platformie .NET • TaskParallelLibrary od kuchni • Parallel LINQ • Visual Studio Async CTP • Podsumowanie • Bibliografia • Pytania
Rynekprocesoró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
Przyszłość … • Analitycy z firmy ForresterResearch 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. SINGLE CORE • Równoległość – wątki są wykonywanie fizycznie równolegle na różnych jednostkach obliczeniowych MULTI CORE
DEMO Ray Tracing
ParallelExtension • 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 • Tabela wyników:
Task Manager LQ LQ LQ T6 T7 T5 LQ T4 GLOBAL QUEUE T3 T2 T1
ImperativeTaskParallelism Task zamiast Thread • Zalety • Brak nakładu związanego z przełączaniem kontekstu • Mniejsze zużycie pamięci • Równomierny rozkład pracy • Skalowalność
DEMO Mnożenie macierzy
Imperative Data Parallelism • Parallelclass • Zbiór statycznych metod • Metody pomocnicze do tworzenia Task’ów • Realizacja podstawowych wzorców • For • ForEach • Invoke
DEMO Liczby pierwsze
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 inpeople.AsParallel() wherep.age < MaxAge && p.age > MinAge && p.state == STATE order by ageascending 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 asyncvoid displayPageTitle() { WriteLinePageTitle( await new WebClient().DownloadStringTaskAsync( new Uri("http://www.pw.edu.pl"))); } public static Task<string> DownloadStringTaskAsync( this WebClientwebClient, Uri address);
Visual Studio Async CTP public asyncvoid 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... • 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
Więcej informacji… Channel 9 http://channel9.msdn.com/tags/Parallel+Extensions/ Microsoft Professional DevelopersConference 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