Programowanie Współbieżne Algorytmy
Sortowanie przez scalanie (mergesort) Algorytm :. JEŚLI jesteś rootem TO: pobierz/wczytaj tablice do posortowania JEŚLI_NIE to pobierz tablicę do posortowania od rodzica
Sortowanie przez scalanie (mergesort) 2. JEŚLI ilość elementów tablicy > 2 i (ilość procesów < max procesów) [tu można dodać czy tablica nie jest już posortowana lub inny warunek zatrzymania dzielenia] TO twórz 2 procesy i wyślij im po jednej części tablicy (najlepiej w miarę równe). czekaj na posortowane 2 tablice scal w jedną posortowaną JEŚLI_NIE to posortuj to co masz. (w szczególnym przypadku będzie to liczba do oddania lub dwie do porównania).
Sortowanie przez scalanie (mergesort) 3. JEŚLI jesteś rootem TO wyświetl/zapisz wynik JEŚLI_NIE to odeślij rodzicowi posortowaną tablicę.
Sortowanie przez scalanie 4,2,7,6,,8,5,,3,9 4,2,7,6, 8,5,,3,9,2,4,6,7,3,5,8,9 2 3 4 5 6 7 8 9
Sortowanie przez scalanie 4,2,7,6,,8,5,,3,9 4,2,7,6, 8,5,,3,9 4,2,7 6, 8,5,3,9 4,2 7,6 5,8 2,4 2,4,7, 3, 5, 8, 9,2,4,6,7,,2,3,4,5,6,7,8,9
Sortowanie oscylacyjne Dla ciągu długości n tworzymy dwa zestawy procesów. A,A 2,...A n B,B,...B n A A 2 A n B B B 2 B n
Sortowanie oscylacyjne Zadania typu A i działają następująco: otrzymują 2 liczby mniejszą przesyłają do Bi- większą do Bi.
Sortowanie oscylacyjne Zadania typu B i działają następująco: otrzymują 2 liczby mniejszą przesyłają do Ai większa do Ai+ Elementy skrajne nic nie robią tylko oddają liczbę Po 2n cyklach mamy gotowy wynik
Sortowanie oscylacyjne 4 4 5 5 3 3 4 4 5 5 3 3
Sortowanie oscylacyjne 4 4 5 3 5 3 4 4 5 3 5 3
Sortowanie oscylacyjne 4 4 3 5 3 5 4 4 3 5 3 5
Sortowanie oscylacyjne 4 3 4 3 5 5 4 3 4 3 5 5
Sortowanie oscylacyjne 3 4 3 4 5 5 3 4 3 4 5 5
Sortowanie oscylacyjne 3 3 4 4 5 5 3 3 4 4 5 5
Mnożenie macierzy Zastosowanie: w matematyce, rozwiązywanie układów równań liniowych Metodą Gaussa Zapisanie obiektów geometrycznych w przestrzeni liniowej w fizyce tzw. Tensory Grafika trójwymiarowa, transformacje
Mnożenie macierzy Definicja Iloczynem macierzy A=[a ij ] nxp przez macierz B=[b ij ] pxm nazywamy taką macierz C=[c ij ] nxm piszemy C=A B, że p c ij = k = a ik b kj dla i=,2,...,n;j=,2,...,m
Mnożenie macierzy
Mnożenie macierzy Kilka przydatnych właściwości: Jeżeli A,B oraz C są macierzami o odpowiednich wymiarach to:. A(BC)=(AB)C 2. (AB)=(A)B 3. (A+B)C=AC+BC 4. C(A+B)=CA+CB 5. IA=A, gdy A nxn i I nxn
Mnożenie macierzy Algorytm dziel i rządź Uzyskanie macierzy C jest wynikiem niezależnych operacji arytmetycznych na wierszach macierzy A i kolumnach B. Stąd intuicyjny sposób podziału zadania na wiele wątków, tak by każdy obliczył niezależnie element macierzy C. Takich podziałów w tym wypadku musi być m*n (liczba wątków). Koszt operacji wynosi O(n3).
Mnożenie macierzy Każdy element A ij B jk C ik to mała podmacierz na której wykonujemy takie same operacje jak na pojedynczych elementach. A=[ A A 2 A 2 A 22] B=[ B B 2 B 2 B 22] C=[ C C 2 C 2 C 22]
Mnożenie macierzy Przykład: [ [ 2 3 2 8 5 9 4 2 2 3 2 9 6 8 3 2 2 2 3 6 9 6 2 2] [ ]=[4 ] 5 6 9 Takie mnożenie można rozbić na 4 działania analogiczne do poniższego 4] [ 3] 2 [ 2 3 2] [ ] = [ 2 3 8 3] [ 2 5 3] = [ 4 8 9 6]
Mnożenie macierzy Metoda Strassena - Z tak podzielonej macierzy wylicz 7 pomocniczych macierzy m i o rozmiarze n/2 m =(A 2 -A 22 )*(B 2 +B 22 ) m 2 =(A +A 22 )*(B +B 22 ) m 3 =(A -A 2 )*(B +B 2 ) m 4 =(A +A 2 )*B 22 m 5 =A *(B 2 -B 22 ) m 6 =A 22 *(B 2 -B ) m 7 =(A 2 +A 22 )*B
Mnożenie macierzy Oblicz składowe Cij macierzy wynikowej C C =m +m 2 -m 4 +m 6 C 2 =m 4 +m 5 C 2 =m 6 +m 7 C 22 =m 2 -m 3 +m 5 -m 7 Koszt powyższego algorytmu szacuje się na O(nlog 2 7)
Mnożenie macierzy Algorytm canona Zakładamy że mamy sieć zadań m x m. Każdy proces (t ij gdzie <i,j<m) wewnątrz zawiera bloki C ij, A ij i B ij. Na wstępie algorytmu proces na przekątnej diagonalnej (t ij gdzie i=j) przesyła swój blok A ij do wszystkich innych procesów w rzędzie i. Po transmisji A ii, wszystkie zadania obliczają A ii xb ij i dodają wynik do C ij. W kolejnym kroku kolumna bloków macierzy B jest obracana. Tzn. t ij przesyła swój blok t (i-)j. Proces t j przesyła swój blok B do t (m-)j.
Mnożenie macierzy Teraz procesy powracają do kroku pierwszego. A i(i+) jest podstawową informacją dla wszystkich innych procesów w rzędzie i. Algorytm jest dalej kontynuowany. Po m iteracjach macierz C zawiera wynik mnożenia AxB, a obracana macierz B przyjmuje swoją początkową postać.
A Mnożenie macierzy B [ 2 3 7 2 3 2 7 3 2 2 ] [ 2 3 ]=[4 4 7 ] C 2 3 3 2 2 2 2 3
Mnożenie macierzy +=x +=x 2 3 +=x3 +=x +=x 3 2 +=x2 2 2 2 +=x2 2 3 3 +=x3 +=x Z macierzy A bierzemy wartości leżące na diagonalnej Przysyłamy do sąsiadów w tym samym wierszu. Mnożymy wartości przesyłane z wartościami macierzy B i dodajemy do wyniku w C
Mnożenie macierzy 2 3 2 3 3 23 2 2 2 2 3 3 2 Kolumny macierzy B rolujemy w dół.
Mnożenie macierzy 2 4 +=2x2 3 6 +=2x3 2 +=2x +=x +=x 3 3 3 +=x3 2 2 +=2x 2 35 +=2x 2 4 +=2x2 Obniżamy diagonalną o jeden w dół. Przysyłamy do sąsiadów w tym samym wierszu. Mnożymy wartości przesyłane z wartościami macierzy B i dodajemy do wyniku w C
Mnożenie macierzy 2 4 3 6 2 2 2 3 3 3 3 2 2 2 5 23 4 Kolumny macierzy B rolujemy w dół.
Mnożenie macierzy 4 +=x 67 +=x 2 2 2 +=x2 2 7 +=3x2 3 +=3x3 3 3 +=3x 2 24 +=2x 2 57 +=2x 3 4 +=2x3 Obniżamy diagonalną o jeden w dół. Przysyłamy do sąsiadów w tym samym wierszu. Mnożymy wartości przesyłane z wartościami macierzy B i dodajemy do wyniku w C
Mnożenie macierzy w 3D [ 2 3 2 2 ] [ 3 2 2 3 ]=[4 7 2 7 3 4 7 ] A C B 3 2 3 2 2 2 3 2 2 2 2 2 2 2 3 3 2 2 2 2 3 3 3 3