EFEKTYWNOŚĆ MNOŻENIA MACIERZY W SYSTEMACH Z PAMIĘCIĄ WSPÓŁDZIELONĄ

Podobne dokumenty
ANALIZA EFEKTYWNOŚCI MNOŻENIA MACIERZY W SYSTEMACH Z PAMIĘCIĄ WSPÓŁDZIELONĄ

MATERIAŁY POMOCNICZE DO LABORATORIUM Z PRZETWARZANIA RÓWNOLEGŁEGO KWIECIEŃ 2018

Mnożenie macierzy. Systemy z pamięcią współdzieloną Systemy z pamięcią rozproszoną Efektywność

Materiały pomocnicze do laboratorium. 1. Miary oceny efektywności 2. Mnożenie macierzy 3. Znajdowanie liczb pierwszych

Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,

Macierzowe algorytmy równoległe

Przykładem jest komputer z procesorem 4 rdzeniowym dostępny w laboratorium W skład projektu wchodzi:

Zadania na zaliczenie przedmiotu Przetwarzanie równoległe Zebrał dla roku.ak. 2015/2016 Rafał Walkowiak,

Algorytmy numeryczne 1

Programowanie CUDA informacje praktycznie i. Wersja

Pytania przykładowe (z ubiegłych lat) na zaliczenie przedmiotu Przetwarzanie równoległe Przygotował Rafał Walkowiak Poznań 3.01.

Zadania na zaliczenie przedmiotu Przetwarzanie równoległe Zebrał dla r.ak. 2014/2015 Rafał Walkowiak,

Programowanie CUDA informacje praktycznie i przykłady. Wersja

PROJEKT 3 PROGRAMOWANIE RÓWNOLEGŁE. K. Górzyński (89744), D. Kosiorowski (89762) Informatyka, grupa dziekańska I3

Programowanie PKG - informacje praktycznie i przykłady. Wersja z Opracował: Rafał Walkowiak

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

Programowanie Współbieżne. Algorytmy

Algorytmy równoległe: prezentacja i ocena efektywności prostych algorytmów dla systemów równoległych

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Ograniczenia efektywności systemu pamięci

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

Literatura. 3/26/2018 Przetwarzanie równoległe - wstęp 1

10/14/2013 Przetwarzanie równoległe - wstęp 1. Zakres przedmiotu

Literatura. 11/16/2016 Przetwarzanie równoległe - wstęp 1

Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle. Krzysztof Banaś, Obliczenia wysokiej wydajności.

Podstawy OpenCL część 2

Optymalizacja skalarna. Piotr Bała. Wykład wygłoszony w ICM w czercu 2000

Projektowanie algorytmów równoległych. Zbigniew Koza Wrocław 2012

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Równoległość i współbieżność

Równoległość i współbieżność

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

Transponowanie macierzy Mnożenie macierzy Potęgowanie macierzy Wyznacznik macierzy

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

CUDA. cudniejsze przyk ady

Algorytmy dla maszyny PRAM

Obliczenia równoległe

Programowanie w modelu równoległości danych oraz dzielonej globalnej pamięci wspólnej. Krzysztof Banaś Obliczenia równoległe 1

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

Złożoność obliczeniowa zadania, zestaw 2

Ekoenergetyka Matematyka 1. Wykład 3.

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Numeryczna algebra liniowa. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1

Zrównoleglenie i przetwarzanie potokowe

5. Model komunikujących się procesów, komunikaty

Wydajność programów sekwencyjnych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Ograniczenia efektywności systemu pamięci

Numeryczna algebra liniowa

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

wagi cyfry pozycje

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

Stronicowanie w systemie pamięci wirtualnej

Architektura komputerów

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]

Wykład 5. Metoda eliminacji Gaussa

Przetwarzanie Równoległe i Rozproszone

Ćwiczenie 3. Iteracja, proste metody obliczeniowe

Wykład z Technologii Informacyjnych. Piotr Mika

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne

Procesory wielordzeniowe (multiprocessor on a chip) Krzysztof Banaś, Obliczenia wysokiej wydajności.

Materiały: kartki papieru (5 x 5 kolorów), piłeczki pingpongowe (5 x 5 kolorów), worek (nieprzeźroczysty).

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

Rozwiązywanie układów równań liniowych metody dokładne Materiały pomocnicze do ćwiczeń z metod numerycznych

15. Macierze. Definicja Macierzy. Definicja Delty Kroneckera. Definicja Macierzy Kwadratowej. Definicja Macierzy Jednostkowej

Algorytm. Krótka historia algorytmów

PRZETWARZANIE RÓWNOLEGŁE I ROZPROSZONE. Mnożenie macierzy kwadratowych metodą klasyczną oraz blokową z wykorzystaniem OpenMP.

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

WHILE (wyrażenie) instrukcja;

Podstawy Informatyki Systemy sterowane przepływem argumentów

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

Zasady analizy algorytmów

TEORETYCZNE PODSTAWY INFORMATYKI

Algorytm. Słowo algorytm pochodzi od perskiego matematyka Mohammed ibn Musa al-kowarizimi (Algorismus - łacina) z IX w. ne.

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Dr inż. hab. Siergiej Fialko, IF-PK,

Klasyfikacje systemów komputerowych, modele złożoności algorytmów obliczeniowych

Algorytm. Słowo algorytm pochodzi od perskiego matematyka Mohammed ibn Musa al-kowarizimi (Algorismus - łacina) z IX w. ne.

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

Algebra WYKŁAD 3 ALGEBRA 1

Algorytm. a programowanie -

Zaawansowane algorytmy i struktury danych

UKŁADY ALGEBRAICZNYCH RÓWNAŃ LINIOWYCH

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

; B = Wykonaj poniższe obliczenia: Mnożenia, transpozycje etc wykonuję programem i przepisuję wyniki. Mam nadzieję, że umiesz mnożyć macierze...

Analiza numeryczna Kurs INP002009W. Wykłady 6 i 7 Rozwiązywanie układów równań liniowych. Karol Tarnowski A-1 p.

Uniwersytet Kazimierza Wielkiego w Bydgoszczy Zespół Szkół nr 5 Mistrzostwa Sportowego XV Liceum Ogólnokształcące w Bydgoszczy

Operacje grupowego przesyłania komunikatów. Krzysztof Banaś Obliczenia równoległe 1

Macierze - obliczanie wyznacznika macierzy z użyciem permutacji

Poszukiwanie liniowe wśród liczb naturalnych

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. for (w1;w2;w3) instrukcja

Transkrypt:

EFEKTYWNOŚĆ MNOŻENIA MACIERZY W SYSTEMACH Z PAMIĘCIĄ WSPÓŁDZIELONĄ 1

Mnożenie macierzy dostęp do pamięci podręcznej [język C, kolejność - j,i,k][1] A[i][*] lokalność przestrzenna danych rózne A,B,C są tablicami nxn elementy z linii pp wykorzystane w kolejnych for (int j = 0 ; j < n ; j++) iteracjach for ( int i = 0 ; i < n ; i++) B[*][j] brak trafienia do pp, pp ładowana for (int k = 0 ; k < n ; k++) przy każdym dostępie C[i][j] + = A[i][k] * B[k][j] ; C[i][j] lokalność odwołań ten sam element dla każdej iteracji pętli wewnętrznej = x Ilość danych wykorzystywanych w pętli wewnetrznej = x C A B Ilość danych wykorzystywanych w 2 pętlach wewnętrznych A parallel? 2

Mnożenie macierzy pamięć podręczna [C, j,i,k][2] = x C A B C[*][j] brak lokalności przestrzennej odwołań A[*][*] brak lokalności czasowej odwołań B[*][j] brak lokalności przestrzennej, lokalność czasowa odwołań A parallel? 3

Mnożenie macierzy pamięć podręczna[c, i,k,j][1] A,B,C są tablicami nxn for ( int i = 0 ; i < n ; i++) for (int k = 0 ; k < n ; k++) for (int j = 0 ; j < n ; j++) C[i][j] + = A[i][k] * B[k][j] ; A[i][k] lokalność czasowa odwołań B[k][*], C[i][*] lokalność przestrzenna odwołań A[i][*] lokalność przestrzenna odwołań B[*][*] brak lokalności czasowej odwołań jeżeli suma rozmiaru(wiersz A, wiersz C i tablica B) większe od rozmiaru pamięci podręcznej A parallel? = x = x 4

Mnożenie macierzy pamięć podręczna [C, i,k,j * ] zmniejszenie zakresu pętli wewnętrznej = x = 1X x rx Obliczamy fragment wiersza macierzy wynikowej for ( int j = 0 ; j < n ; j+=r) // cała macierz wynikowa for ( int i = 0 ; i < n ; i++) // wyznaczenie niebieskiej części wyniku for (int k = 0 ; k < n ; k++) // wyznaczenie brązowej części wyniku for (int jj = j ; jj < j+r-1 ; jj++) C[i][jj] + = A[i][k] * B[k][jj] ; Przy odpowiedniej wielkości r możliwa lokalność czasowa odwołań do B[*][jj:jj+r-1] Zmniejszenie wielkości fragmentów tablic, na podstawie których realizowane są obliczenia (w jednej fazie przetwarzania) prowadzi do większej lokalności odwołań (a efektywność DTLB? rozwiązanie na kolejnym slajdzie). 5

r x r Mnożenie macierzy pamięć podręczna [operacje na fragmentach tablic][graficznie] C A B for (int kk = k ; kk < k+r ; kk++) C[ii][jj] + = A[ii][kk] * B[kk][jj]; for (int jj = j ; jj < j+r ; jj++) for (int kk = k ; kk < k+r ; kk++) C[ii][jj] + = A[ii][kk] * B[kk][jj]; for ( int ii = i ; ii < i+r; ii++) for (int jj = j ; jj < j+r ; jj++) for (int kk = k ; kk < k+r ; kk++) C[ii][jj] + = A[ii][kk] * B[kk][jj]; for (int k = 0 ; k < n ; k+=r) for ( int ii = i ; ii < i+r; ii++) for (int jj = j ; jj < j+r ; jj++) for (int kk = k ; kk < k+r ; kk++) C[ii][jj] + = A[ii][kk] * B[kk][jj]; 6

Mnożenie macierzy pamięć podręczna [operacje na fragmentach tablic][kod] #pragma omp parallel for for ( int i = 0 ; i < n ; i+=r) for ( int j = 0 ; j < n ; j+=r) for (int k = 0 ; k < n ; k+=r) // kolejne fragmenty we for ( int ii = i ; ii < i+r; ii++)//fragment wyniku for (int jj = j ; jj < j+r ; jj++) for (int kk = k ; kk < k+r ; kk++) C[ii][jj] + = A[ii][kk] * B[kk][jj]; Dla C[ii][jj], A[ii][kk], B[kk][jj] lokalność czasowa i przestrzenna dostępów przy założeniu, że wszystkie podmacierze A,B i C (A[i:i+r-1][k:k+r-1],B[k:k+r-1][j:j+r- 1], C[i:i+r-1][j:j+r-1] ) mieszczą się w pamięci podręcznej Zakładając, że rozmiar pp równy M można wyznaczyć wymagane r<= (M/3) 1/2 (dla przetwarzania sekwencyjnego 1 procesor 3 tablice ) 1. 3 pętle wewnętrzne służą do wyznaczenia wyniku częściowego dla fragmentu tablicy wynikowej (sum iloczynów elementów wierszy i kolumn fragmentów macierzy wejściowych), 2. czwarta pętla (po k) służy do uzupełnienia wyniku o pozostałe iloczyny wynikające z uwzględnienia kolejnych (branych po r) elementów wierszy i kolumn fragmentów macierzy wejściowych, 3. pętle piąta i szósta służą do wyznaczenia kolejnych kwadratowych (r) obszarów macierzy wynikowej. 7

MNOŻENIE MACIERZY W SYSTEMACH Z PAMIĘCIĄ ROZPROSZONĄ 8

Mnożenie macierzy (dystrybucja kolumnowa)[1] A,B, C sa macierzami nxn P liczba procesorów A,B,C są rozdystrybuowane w pamięciach procesorów w sposób blokowy (całymi kolumnami) Obliczenia C[i][j] + = A[i][k] * B[k][j] ; są realizowane zgodnie z zasadą właściciel wyniku przetwarza. Zgodnie z zasadą 3 pętlowego algorytmu mnożenia tablic (kolejnośc ijk - znany kod) kolumny tablic C i B sa przetwarzane lokalnie (tylko w różnych procesorach). Ze względu na to, że A jest używane w wszystkich procesorach konieczne jest rozesłanie (all-to-all broadcast) tablicy A. 9

Kolumnowa dystrybucja tablic Kolejno narysowane tablice C,A,B C=A*B 3 komputery uczestniczą w przetwarzaniu. Dystrybucja kolumnowa, kolor niebieski dane dla procesora 1 Kolor zielony wartości procesora 1 otrzymane w wyniku rozgłaszania od pozostałych 2 procesorów. 10

Mnożenie macierzy systemy wieloprocesorowe z pamięcią rozproszoną (dystrybucja kolumnowa)[2] float a[n][n/p], b[n][n/p], c[n][n/p],tmp[n][n]; for (int proc = 0 ; j < P ; j++) //rozsyłanie do wszystkich odbiorców a_send(proc, a) for (int proc = 0 ; j < P ; j++) //rozsyłanie do wszystkich odbiorców a_recv(proc, tmp[1:n][proc*n/p: proc*(n/p+1)-1]; // co oznacza ten zapis? // oczekiwanie na zakończenie asynchronicznej komunikacji (dlaczego asynchroniczna?) for ( int i = 0 ; i < n ; i++) for (int k = 0 ; k < n ; k++) for (int j = 0 ; j < n/p ; j++) c[i][j] + = tmp[i][k] * b[k][j] ; Każdy procesor przetwarza (1+2/P)n 2 elementów, każdy procesor rozsyła n 2 /P elementów do P procesorów. a_send, a_recv oznaczają operacje asynchroniczne odpowiednio nadawania i odbioru. 11

1 2 3 4 5 6 7 8 9 Struktura systemu i przydzielone części tablicy wyniku UWAGA: właściciel oblicza 1 2 3 5 6 4 Mnożenie macierzy (dystrybucja szachownicowa) A,B,C sa macierzami nxn P = 9 liczba procesorów A,B są rozdystrybuowane w pamięciach procesorów w układzie szachownicy (z przesunięciem - rysunek) Obliczenia C[i][j] + = A[i][k] * B[k][j] są realizowane zgodnie z zasadą właściciel wyniku przetwarza. Dla wyznaczenia wyniku każdy procesor w kolejnym kroku musi otrzymać: 9 7 8 od prawego sąsiada (cyklicznie) wartości jego aktualnej części tablicy A od dolnego sąsiada (cyklicznie) wartości jego aktualnej części tablicy B Dystrybucja wśród procesorów początkowej tablicy A w 9 procesorach (liczby oznaczają część tablicy) podtablice danych A w kolejnych wierszach tablicy procesorów przesunięte o 1 w stosunku do dystrybucji wyniku 1 4 7 5 8 2 9 3 6 Dystrybucja początkowa tablicy B (liczby oznaczają część tablicy) podtablice danych B w kolejnych kolumnach tablicy procesorów przesunięte o 1 w stosunku do dystrybucji wyniku. Zajętość pamięci: na procesor na poziomie 3n 2 /P, sumarycznie jest równa zajętości dla przetwarzania sekwencyjnego, Każdy procesor przesyła n 2 /P elementów do 2(sqrt(P)-1) procesorów 12

Mnożenie macierzy (algorytm Cannona minimalizcja zajętości pamięci) A00 B00 A01 B11 A02 B22 A01 B10 A02 B21 A00 B02 A02 B20 A00 B01 A01 B12 A11 B10 A12 B21 A10 B02 A12 B20 A10 B01 A11 B12 A10 B00 A11 B11 A12 B22 A22 B20 A20 B01 A21 B12 A20 B00 A21 B11 A22 B22 A21 B10 A22 B21 A20 B02 Wymiana części tablic wejściowych odbywa się synchronicznie (cyklicznie, kolumnami dla B i wierszami dla A ) z obliczeniami wykorzystującymi te części tablic, każda tablica jest przechowywana w jednej kopii. Symbole A?? B?? oznaczają podtablice, których odpowiednie wiersze i kolumny pomnożone przez siebie stanowią wynik częściowy generowany w danym etapie przetwarzania 13

Mnożenie macierzy (algorytm Cannona minimalizcja zajętości pamięci) c=axb a,b,c są macierzami nxn c jest dystrybuowane w bloki szachownicowo, a i b są dystrybuowane w bloki szachownicowo (z odpowiednim przesunięciem) Obliczenia odbywają się z cykliczną rotacją w kolejnych krokach algorytm dla P 2 procesorów w strukturze tablicy proc[p,p] Komunikacja asynchroniczna z buforowaniem float a[n/p][n/p], b[n/p][n/p], c[n/p][n/p]; for ( int kk = 0 ; i < P ; i++) { for ( int i = 0 ; i < n/p ; i++) for (int j = 0 ; j < n/p ; j++) send(proc[pi,pj-1], a); send(proc[pi-1,pj], b); recv(proc[pi,pj+1], a); recv(proc[pi+1,pj], b); } for (int k = 0 ; k < n/p ; k++) c[i][j] + = a[i][k] * b[k][j] ; 14

Mnożenie macierzy algorytm Cannona koszt przetwarzania Koszt komunikacji: każdy z procesorów rozsyła w wierszu macierzy procesorów - tablicę a w kolumnie macierzy procesorów - tablicę b Koszt rozsyłania n 2 /p elementów do sqrt(p)-1 procesorów to t s ( p- 1)+t w n 2 /p ( p-1) Koszt obliczeń mnożenie tablic o rozmiarze n/ p powtarzane p razy daje koszt n 3 /p Całkowity koszt - n 3 /p + 2 (t s + t w n 2 /p) ( p-1) 15