Wymagane jest znalezienie mocy (dodatniej liczby całkowitej) macierzy liczb rzeczywistych. Istnieje wiele wydajnych algorytmów mnożenia macierzy (np. Niektóre algorytmy równoległe to Cannon, DNS ), ale czy istnieją algorytmy, które są przeznaczone właśnie do znalezienia mocy macierzy i które są bardziej wydajne niż sekwencyjne wykonywanie mnożenia macierzy? Szczególnie interesują mnie algorytmy równoległe.
11
Odpowiedzi:
źródło
Istnieją dwa poziomy, na których można analizować równoległe przyspieszenia z potęgowaniem macierzy: poziom „makro-algorytmiczny”, który decyduje, które macierze należy pomnożyć, oraz poziom „mikro-algorytmiczny”, na którym można przyspieszyć same multiplikacje z równoległością.
(Uwaga: strona wikipedia służy do ogólnego obliczania macierzy. Nie jestem pewien, czy można to zrównoleglić jeszcze bardziej, korzystając z informacji, że kwadraty macierz).
Pytanie brzmi: czy możemy to pokonać równolegle? Twierdzę, że odpowiedź brzmi „nie”.
Prostym powodem jest to, że potęgowanie przez kwadrat jest zasadniczo dynamicznym algorytmem programowania; pozwala ominąć całą pracę poprzez ponowne użycie wyników cząstkowych, ale to z kolei tworzy zależność danych, która uniemożliwia równoległość. Jeśli pozbędziemy się zależności danych, ale znacznie zwiększymy ilość pracy, którą musimy wykonać.
Gdybyśmy jednak wykonywali potęgowanie w ten sposób, wyglądałoby to tak:
źródło
źródło