ݺߣ

ݺߣShare a Scribd company logo
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 – Գٱ™
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.
                                    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#
•    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:
   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
Task Manager

                            LQ


                                 WG
                       LQ                  LQ



                                                T6
                      WG                   WG        T7
GLOBAL QUEUE




               T5
               T4                     LQ
               T3
               T2                WG
               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ść
DEMO
Mnożenie macierzy
Imperative Data Parallelism

• Parallel class
   • 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 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...

• 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 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
PYTANIA ?
ٴܱ

More Related Content

Programowanie Równolegle - Parallel Extensions

  • 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
  • 25. ٴܱ