Existem algoritmos de exponenciação de matriz paralela que são mais eficientes que a multiplicação sequencial?

11

É necessário encontrar a potência (número inteiro positivo) da matriz de números reais. Existem muitos algoritmos eficientes de multiplicação de matrizes (por exemplo, alguns algoritmos paralelos são Cannon, DNS ), mas existem algoritmos destinados exatamente a encontrar o poder da matriz e que são mais eficientes do que a execução seqüencial da multiplicação de matrizes? Estou particularmente interessado em algoritmos paralelos.

Ao Sr
fonte
1
O que você tentou? Onde você ficou preso? Que pesquisa você fez? Além do título, onde está a pergunta? Para a versão de decisão do seu problema (do título), a resposta é "sim", mas você já sabe, certo?
Mal
2
@TomR Esta questão provavelmente é do seu interesse
Adriann
1
Talvez algo assim ? Ou você está procurando algo mais? Quais são os tamanhos e potências em seu aplicativo?
Mal
1
Você pode calcular a enésima potência com menos de n-1 multiplicações quando n ≥ 4. Para matrizes grandes, geralmente valeria a pena encontrar o menor número possível de multiplicações (por exemplo, existe um método simples para calcular n ^ 15 com 6). multiplicações, mas isso pode ser feito com 5). Você pode aplicar o mesmo princípio para encontrar o menor número de multiplicações seqüenciais, o que será mais difícil.
gnasher729
1
Você também deve considerar a quantidade de paralelismo disponível para você. "Paralelismo" é sobre a exploração de recursos que, de outra forma, não seriam utilizados. Se uma implementação de multiplicação de matrizes já puder usar todos os recursos disponíveis de forma eficiente, não há mais nada a explorar para calcular os poderes das matrizes.
precisa saber é o seguinte

Respostas:

5

M15

M2

M3=M2MM4=M2M2

M7=M4M3M8=M4M4

M15=M8M7

M5M5

M3M3M2M4M2

M2=MMM3=M2MM2M3M2M3M4

M15M1000

M2M5

M6M25M25

M108M125k(k+1)2

gnasher729
fonte
4

Há dois níveis nos quais você pode analisar acelerações paralelas com exponenciação de matriz: o nível "macro-algorítmico" que decide quais matrizes multiplicar e o nível "micro-algorítmico" onde você pode acelerar as multiplicações com paralelismo.

nnO(log2(n))O(n)

(Nota: a página da wikipedia é para cálculo geral da matriz. Não tenho certeza se isso pode ser paralelizado ainda mais usando as informações que estamos construindo ao quadrado uma matriz.)

AmA

AkO(log(k))

A questão é: podemos vencer isso com paralelismo? Eu afirmo que a resposta é não.

A razão simples é que a exponenciação ao quadrado é essencialmente um algoritmo de programação dinâmica; permite que você pule todo o trabalho reutilizando sub-resultados, mas isso, por sua vez, cria uma dependência de dados que não permite o paralelismo. Se nos livrarmos da dependência de dados, mas também aumentamos bastante a quantidade de trabalho que temos que fazer.

k

A1A2A3A4A5...Ak

k2

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

kO(log(k))

No entanto, se realizássemos a exponenciação dessa maneira, ficaria assim:

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

A2

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

Kurt Mueller
fonte
3

mlogm2m

A=SΛS1Am=SΛmS1
mO(1)m
nbubis
fonte