Esistono algoritmi di esponenziazione a matrice parallela che sono più efficienti della moltiplicazione sequenziale?


11

Uno è richiesto per trovare la potenza (numero intero positivo) della matrice di numeri reali. Esistono molti algoritmi di moltiplicazione di matrici efficienti (ad es. Alcuni algoritmi paralleli sono di Cannon, DNS ) ma esistono algoritmi destinati esattamente a trovare la potenza della matrice e che sono più efficienti dell'esecuzione sequenziale della moltiplicazione di matrici? Sono particolarmente interessato agli algoritmi paralleli.


1
Che cosa hai provato? Dove ti sei bloccato? Che ricerca hai fatto? Oltre al titolo, dov'è la domanda? Per la versione decisionale del tuo problema (dal titolo), la risposta è "sì", ma lo sai già, giusto?
Evil

2
@TomR Questa domanda probabilmente ti interessa
adrianN,

1
Forse qualcosa del genere ? O stai cercando qualcos'altro? Quali sono le dimensioni e i poteri nella tua applicazione?
Evil

1
Puoi calcolare l'ennesima potenza con meno di n-1 moltiplicazioni quando n ≥ 4. Per matrici di grandi dimensioni, di solito varrebbe la pena trovare il numero più piccolo possibile di moltiplicazioni (ad esempio, esiste un metodo semplice per calcolare n ^ 15 con 6 moltiplicazioni, ma si può fare con 5). È quindi possibile applicare lo stesso principio per trovare il minor numero di moltiplicazioni sequenziali, che sarà più difficile.
gnasher729,

1
Dovresti anche considerare la quantità di parallelismo a tua disposizione. Il "parallelismo" riguarda lo sfruttamento di risorse che altrimenti non sarebbero utilizzate. Se un'implementazione della moltiplicazione matriciale può già utilizzare tutte le risorse disponibili in modo efficiente, non c'è nient'altro da sfruttare per il calcolo dei poteri delle matrici.
gnasher729,

Risposte:


5

Se disponi di più processori che possono funzionare in parallelo, puoi calcolare qualsiasi potenza fino alla potenza (2 ^ k) in k passi. Ad esempio: per calcolare , si calcola:M15

Fase 1: calcola M2

Fase 2: calcolare e M 4 = M 2M 2M3=M2MM4=M2M2

Fase 3: calcolare e M 8 = M 4M 4M7=M4M3M8=M4M4

Fase 4: calcolare M15=M8M7

Questa è una moltiplicazione in più rispetto al calcolo di in tre moltiplicazioni e innalzamento di M 5 alla terza potenza in altre due moltiplicazioni, ma dovrebbe essere più veloce se si hanno due processori. Per alti poteri arbitrari, avrai bisogno di più processori.M5M5

M3M3M2M4M2

M2=MMM3=M2MM2M3M2M3M4

M15M1000

M2M5

M6M25M25

M108M125k(k+1)2


4

Esistono due livelli che è possibile analizzare accelerazioni parallele con esponenziazione della matrice: il livello "macro-algoritmico" che decide quali matrici moltiplicare e il livello "micro-algoritmico" in cui è possibile accelerare le moltiplicazioni stesse con il parallelismo.

nnO(log2(n))O(n)

(Nota: la pagina di Wikipedia è per il calcolo generale della matrice. Non sono sicuro che possa essere ulteriormente parallelizzato usando le informazioni che stiamo quadrando una matrice.)

AmA

AkO(log(k))

La domanda è: possiamo battere questo con il parallelismo? Sostengo che la risposta è no.

La semplice ragione è che l'esponenziazione per quadratura è essenzialmente un algoritmo di programmazione dinamica; ti consente di saltare tutto il lavoro riutilizzando i subresults, ma questo a sua volta crea una dipendenza dai dati che non consente il parallelismo. Se eliminiamo la dipendenza dei dati, ma aumentiamo anche notevolmente la quantità di lavoro che dobbiamo fare.

k

A1A2A3A4A5...Ak

k2

(A1A2)(A3A4)(A5A6)...(Ak1Ak)

kO(log(k))

Tuttavia, se dovessimo eseguire l'espiazione in questo modo, sembrerebbe così:

(AA)(AA)(AA)...(AA)

A2

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


3

mlogm2m

A=SΛS1Am=SΛmS1
mO(1)m
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.