Czy istnieją algorytmy potęgowania równoległego macierzy, które są bardziej wydajne niż mnożenie sekwencyjne?

11

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.

Do Pana
źródło
1
Czego próbowałeś? Gdzie utknąłeś? Jakie badania przeprowadziłeś? Gdzie jest pytanie oprócz tytułu? W przypadku wersji decyzyjnej twojego problemu (od tytułu) odpowiedź brzmi „tak”, ale już o tym wiesz, prawda?
Zło
2
@TomR To pytanie prawdopodobnie Cię interesuje
adrianN
1
Może coś takiego ? A może szukasz czegoś innego? Jakie są rozmiary i moce w twojej aplikacji?
Zło
1
Możesz obliczyć n-tą moc z mniejszą niż n-1 mnożeniem, gdy n ≥ 4. W przypadku dużych macierzy zwykle warto znaleźć najmniejszą możliwą liczbę mnożenia (na przykład istnieje prosta metoda obliczenia n ^ 15 za pomocą 6 mnożenia, ale można to zrobić za pomocą 5). Następnie możesz zastosować tę samą zasadę, aby znaleźć najmniejszą liczbę kolejnych zwielokrotnień, co będzie trudniejsze.
gnasher729,
1
Powinieneś również wziąć pod uwagę ilość dostępnej równoległości. „Równoległość” polega na wykorzystaniu zasobów, które w innym przypadku byłyby nieużywane. Jeśli implementacja mnożenia macierzy może już efektywnie wykorzystywać wszystkie dostępne zasoby, to nie ma nic więcej do wykorzystania do obliczania mocy macierzy.
gnasher729,

Odpowiedzi:

5

M.15

M.2)

M.3)=M.2)M.M.4=M.2)M.2)

M.7=M.4M.3)M.8=M.4M.4

M.15=M.8M.7

M.5M.5

M.3)M.3)M.2)M.4M.2)

M.2)=M.M.M.3)=M.2)M.M.2)M.3)M.2)M.3)M.4

M.15M.1000

M.2)M.5

M.6M.25M.25

M.108M.125k(k+1)2)

gnasher729
źródło
4

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ą.

nnO(log2)(n))O(n)

(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).

ZAmZA

ZAkO(log(k))

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ć.

k

ZA1ZA2)ZA3)ZA4ZA5...ZAk

k2)

(ZA1ZA2))(ZA3)ZA4)(ZA5ZA6)...(ZAk-1ZAk)

kO(log(k))

Gdybyśmy jednak wykonywali potęgowanie w ten sposób, wyglądałoby to tak:

(ZAZA)(ZAZA)(ZAZA)...(ZAZA)

ZA2)

ZAknnZAO(log2)(n)log(k))O(nlog(k))

Kurt Mueller
źródło
3

mlogm2)m

ZA=S.ΛS.-1ZAm=S.ΛmS.-1
mO(1)m
nbubis
źródło