Literatura 1. Wprowadzenie do obliczeń równoległych, Zbigniew Czech, Wydawnictwo Naukowe PWN, 2010, 2013 2. Introduction to Parallel Computing; Grama, Gupta, Karypis, Kumar; Addison Wesley 2003 3. Designing and Building Parallel Programs; I.Foster, http://www-unix.mcs.anl.gov/dbpp/ 4. Podstawy programowania współbieżnego, M. Ben-Ari, WNT 5. Programowanie współbieżne i rozproszone, Z.Weiss, T.Gruźlewski, WNT 6. Software Optimization for High-Performance Computing; Wadleigh, Crawford, Prentice Hall 2000 3/26/2018 Przetwarzanie równoległe - wstęp 1
Materiały związane z przedmiotem www.cs.put.poznan.pl/rwalkowiak Użutkownik: student Hasło: 3.10.2017 3/26/2018 Przetwarzanie równoległe - wstęp 2
Konsultacje W trakcie zajęć semestru W poniedziałki w godz. 18.30-20.00 Zapraszam do konsultacji zagadnień związanych z przedmiotem: projekty, zadania egzaminacyjne, wykładany materiał. 3/26/2018 Przetwarzanie równoległe - wstęp 3
Zmiany w stosunku do ubiegłych lat Zaliczenie w formie egzaminu podczas sesji. Forma pytań zaliczeniowych nie zmienia się. Pytania problemowe jako test zrozumienia zagadnień z zakresu przetwarzania równoległego. 3/26/2018 Przetwarzanie równoległe - wstęp 4
Przykład 1 zadania egz. Proszę skorzystać z prawa Amdahla. Sp(s;p) jest to przyspieszenie dla obliczeń charakteryzujących się częścią sekwencyjną (niezrównoleglającą się) równą s przeprowadzonych na p procesorach. Analogicznie oznaczona jest efektywność E(s;p). Wiadomo z prawa Amdahla, że przyspieszenie wzrasta z liczbą procesorów. Wiadomo też, że efektywność obliczeń spada wraz z liczbą procesorów. Proszę powiedzieć: Ile i dlaczego będą równe Sp(s;p=nieskończoność), E(s;p=nieskończoność)? Proszę wyjaśnić ile wynosi iloraz E(s=0,2; p=nieskończoność)/ E(s=0,4; p=nieskończoność)? 3/26/2018 Przetwarzanie równoległe - wstęp 5
Przykład 2 zadania egz. Za pomocą odpowiedniej funkcji przydzielono 4 wątki na 4 procesory systemu równoległego (z prywatnymi pamięciami podręcznymi o długości linii pp 64 bajty). Obliczenia 4 wątków utworzonych dla kodu podanego poniżej korzystają ze zmiennych współdzielonych typu float (4 bajty). Zmienne i oraz n są przechowywane w rejestrach. 0,5 Z ilu różnych obiektów zmiennych korzystają wątki - proszę wymienić wszystkie? Które obiekty zmiennych są prywatne a które są współdzielone? 1,0 Proszę wyjaśnić - Ile wynosi stosunek trafień do pp dla dostępów (odczyty i zapisy) do zmiennych współdzielonych, a ile do zmiennych prywatnych? int i,n; float a[n],suma; #pragma omp parallel for reduction(suma:+) schedule(static,1) for (i=0; i<n; i++) Suma+=a[i]]; 3/26/2018 Przetwarzanie równoległe - wstęp 6
Zakres przedmiotu 1. Motywacje do zagadnień przetwarzania 2. Architektury maszyn 3. Modele przetwarzania 4. Podstawy projektowania algorytmów 5. Ocena efektywności programów 6. Komunikacja w systemach 7. Algorytmy 3/26/2018 Przetwarzanie równoległe - wstęp 7
Dlaczego warto studiować przetwarzanie równoległe? Przetwarzanie sekwencyjne jest dziś całkiem szybkie Jednak: Potrzebujemy ciągle rosnącej wydajności Budujemy systemy równoległe np. procesory wielordzeniowe, wieloprocesorowe karty graficzne Potrzebujemy umiejętności tworzenia programów równoległych Równoległość to duże wyzwanie intelektualne dla informatyki modele, języki, algorytmy, sprzęt 3/26/2018 Przetwarzanie równoległe - wstęp 8
Zamiana sytuacji w technologii mikroprocesorów Lata 1986-2002 mikroprocesory przyspieszały średnio z roku na rok o około 50% (większa efektywność obliczeń) Od 2003: wzrost efektywności około 20% na rok, obserwacja granic wzrostu prędkości wynikających z: właściwości fizycznych materiałów (odprowadzanie energii cieplnej, cieplno - niestabilne systemy, opóźnienia transmisji sygnału), wykorzystania możliwości zrównoleglenia przetwarzania na poziomie pojedynczego procesora (długość słowa, superskalarność) wysokiej złożoności struktury mikroprocesora Dziś równoległość przetwarzania nie tylko w superkomputerach i centrach naukowych. Zamiast projektować i realizować szybsze mikroprocesory umieszcza się wiele procesorów w ramach pojedynczego układu scalonego tzw. rdzenie. 3/26/2018 Przetwarzanie równoległe - wstęp 9
Oczekiwania na wzrost efektywności - przykłady Modelowanie klimatu, prognozowanie pogody Nauki biologiczne (badania genomu, struktury białek itp) Badania nad lekarstwami, szczepionkami Poszukiwania nowych źródeł energii Analiza danych w gospodarce 3/26/2018 Przetwarzanie równoległe - wstęp 10
Rola programistów co jest problemem? Dodatkowe rdzenie nie powodują wzrostu efektywności obliczeń - jeśli programiści ich nie wykorzystają ( wykorzystywane komputera tylko dla kodu sekwencyjnego). Efektywność przetwarzania programów sekwencyjnych nie wzrasta w systemach wielordzeniowych, wieloprocesorowych. Konieczne rozumienie sposobu działania systemów równoległych, wiedza o programowaniu równoległym i umiejętności przeprowadzenia równoległych obliczeń dla wykorzystania procesorów wielordzeniowych i kart graficznych. 3/26/2018 Przetwarzanie równoległe - wstęp 11
Możliwe podejścia w programowaniu dla systemów równolełych Ponowne napisanie programów sekwencyjnych aby stały się Zastosowanie programów zrównoleglających: Ograniczony zakres powodzenia Zrównoleglenie tylko pewnych konstrukcji kodowych np. równoległe wykonanie pętli Trudne zadnie aby było efektywnie (możliwe?) Podejście od nowa - zaprojektowanie algorytmu, tak aby odzwierciedlał równoległość dostępną w problemie i metodzie jego rozwiązania. 3/26/2018 Przetwarzanie równoległe - wstęp 12
Dalsze uzasadnienia dla przetwarzania równoległego Skrócenie czasu projektownia i wdrożenia systemów wieloprocesorowych (lub wielordzeniowych) wykorzystanie standardowych interfejsów sprzętowych pozwala na zastosowanie nowych architektur i technologii procesorów, zaawansowane narzędzia projektowe i testujące. Postęp w standaryzacji środowisk przetwarzania równoległego zapewniający dłuższy cykl życia aplikacji równoległych (MPI, Open MP, OpenGL, CUDA) 3/26/2018 Przetwarzanie równoległe - wstęp 13
Budowa sprzętu - równoległość wewnętrzna Wzrost złożoności układów scalonych (IC) podwojenie złożoności w ciągu 18 miesięcy (wg Gordona Moora) poprzez nowe technologie wytwarzania IC. Dla wykorzystania możliwego technologicznie wzrostu złożoności IC i jego przekształcenia na wzrost wydajności przetwarzania konieczna praca nad równoległością wewnętrzną procesora (potokowość, superskalarność i aby były możliwe: dynamiczne przetwarzania rozkazów, predykcja rozgałęzień, wstępne pobranie kodu i danych), konieczne zrozumienie równoległości wewnętrznej procesora. 3/26/2018 Przetwarzanie równoległe - wstęp 14
Prędkość dostępu do pamięci (ang. memory wall) powiązania z przetwarzaniem równoległym Przyrost prędkości zegarów procesorów przewyższa wzrost prędkości dostępu do jednostki pamięci. Efektem jest konieczność korzystania z szybszych systemów pamięci pamięci podręcznej. Efektywność systemów jest zależna od stopnia obsługi żądań dostępu do pamięci w ramach szybkiej pamięci podręcznej. Zasada lokalności obowiązująca przy projektowaniu algorytmu równoległego prowadzi do kodu efektywnie korzystającego z pamięci podręcznej widoczne tutaj są korzyści z badań nad równoległością dla zapewniania efektywności przetwarzania sekwencyjnego. 3/26/2018 Przetwarzanie równoległe - wstęp 15
Lokalność przetwarzania, dostępu do danych W systemach równoległych ogólna przepustowość procesorypamięć jest większa niż w systemach jednoprocesorowych z powodu: większej pamięci podręcznej, równoległego dostępu procesorów do pamięci. Wynik: podział na (równolegle realizowane) podproblemy umożliwia większą lokalność przetwarzania i wyższą efektywność dostępu do pamięci. Dodatkowo wzrost rozmiaru pp (w systemie równoległym) prowadzi do efektywnego przetwarzania (możliwe jest nawet skrócenie czasu przetwarzania w większym stopniu niż wynikający z użytej liczby procesorów). 3/26/2018 Przetwarzanie równoległe - wstęp 16
Rozważmy prosty problem 1 2 3 5 5 6 7 8 4 5 1 3 0 3 1 1 1 1 1 1 1 7 9 101 Sumowanie elementów tablicy a1 = rdtsc(); for(int i=0;i<max;i++) suma+=table[i]; a2 = rdtsc(); printf("czas obliczeń =%llu us \n", (a2- a1)*3/10000); Czas przetwarzania sekwencyjnego: dla MAX 100000 i Intel 2,8 GHz i5 (4 rdzenie) 250 us 3/26/2018 Przetwarzanie równoległe - wstęp 17
Zróbmy to równolegle P1 P2 P3 P4 Sumowanie elementów tablicy za pomocą 4 procesów a1 = rdtsc(); #pragma omp parallel #pragma omp for shared(table,suma) for(int i=0;i<max;i++) suma+=table[i]; a2 = rdtsc(); printf("czas obliczeń =%llu us \n", (a2-a1)*3/10000); 3/26/2018 Przetwarzanie równoległe - wstęp 18
Równoległe sumowanie elementów Wyniki: wyścig niepoprawne wyścig w dostępie do współdzielonej zmiennej - rezultat nadpisania odczytanych i wykorzystywanych przez inny proces (na tym samych lub innym procesorze) wartości zmiennej suma Rozwiązanie: Synchronizacja dostępu do zmiennej współdzielonej 3/26/2018 Przetwarzanie równoległe - wstęp 19
Równoległe sumowanie elementów poprawny program liczy się powoli Rozwiązanie 2: a1 = rdtsc(); #pragma omp parallel #pragma omp for shared(table,suma) for(int i=0;i<max;i++) #pragma omp atomic suma+=table[i]; a2 = rdtsc(); printf("czas obliczeń =%llu us \n", (a2-a1)*3/10000); Wynik poprawny: czas pracy około 2800 us czyli zamiast skrócenia czasu obliczeń - 11 razy dłużej niż sekwencyjnie. Dlaczego? 3/26/2018 Przetwarzanie równoległe - wstęp 20
L2 Równoległe sumowanie elementów Memory L2 L3 L2 L2 Koszty: #pragma omp parallel for for(int i=0;i<max;i++) #pragma omp atomic suma+=table[i]; koszt dostępu do pamięci (dyrektywa atomic wprowadza odczyt i zapis wartości zmiennej z/do pamieci przed/po jej wykorzystaniem koszt dostępu do zamka (mutex_lock) dla synchronizacji dostępu do zmiennej na poziomie procesów koszt przepisywania danych pomiędzy poziomami pamięci: procesorem, pamięcią podręczną L1 jednego rdzenia, wspóldzieloną pp L3, L1 innego rdzenia, a nawet do innego procesora (gdy wiele fizycznych procesorów) suma jest: współdzielona modyfikowana ale nie jest lokalna!! nie jest w sposób ciągły dostępna dla wątku w procesorze, na którym wątek 3/26/2018 jest przetwarzany 21 L1 L1 L1 L1 P1 P2 P3 P4 Przepisywanie wartości współdzielonej
Równoległe sumowanie elementów Rozwiązanie 3: Większa lokalność przetwarzania prywatna suma #pragma omp parallel { float sumal=0.0; #pragma omp for for(int i=0;i<max;i++) sumal+=table[i]; #pragma omp atomic ;poza pętlą każdy wątek jeden raz } suma+=sumal; Czas przetwarzania na 4 procesorach: 70 us czyli 3,6 x szybciej niż sekwencyjnie. Wnioski: 1. efektywna równoległość = maksymalizacja lokalności dostępów do danych 2. równoległość to często konieczność synchronizacji obliczeń (ale synchronizacji efektywnej rzadko występującej). 3/26/2018 Przetwarzanie równoległe - wstęp 22
Równoległe sumowanie elementów 3/26/2018 Przetwarzanie równoległe - wstęp 23
Cele w programowaniu równoległym Skalowalność: kolejne procesory mogą zostać dodane dla szybszego rozwiązania problemu Wydajność: efektywnie wykorzystać dostępne procesory - przyspieszenie Przenośność: oprogramowanie nadające się do przenoszenia między systemami 3/26/2018 Przetwarzanie równoległe - wstęp 24