Qual é a sobrecarga na multiplicação de matrizes esparsas

10

A multiplicação da matriz (Mat * Mat e Mat * Vec) é dimensionada com o número de não-zeros ou com o tamanho da matriz? Ou alguma combinação dos dois.

Que tal com forma.

Por exemplo, eu tenho uma matriz 100 x 100 com 100 valores ou uma matriz 1000 x 1000 com 100 valores.

Ao esquadrar essas matrizes (ou multiplicá-las por matrizes semelhantes com esparsidade semelhante), o primeiro (100x100) será mais rápido que o segundo (1000x1000)? Depende de onde estão os valores?

Se for dependente da implementação, estou interessado na resposta para o PETSc.

Andrew Spott
fonte

Respostas:

11

O custo da multiplicação de vetor de matriz esparsa é escalonado linearmente com o número de entradas diferentes de zero, pois cada entrada é multiplicada uma vez por alguma entrada no vetor.

A

UMA=(δ1 1β1 1δ2β2δn-1 1βn-1 1γ1 1γ2γn-1 1δn),

UMAO(n)UMA2UMAUMA2UMA2

Jack Poulson
fonte
4

Em primeiro lugar, depende da implementação. Se você implementar uma matriz esparsa como uma matriz densa e preencher os não-zeros, ela será dimensionada com o tamanho geral da matriz. Se for armazenado como diferente de zero, será escalado à medida que o tempo de acesso for escalado com o tamanho da matriz.

O(r2n2)

Uma coisa a notar, no entanto, é que não há sentido em armazenar o que não está lá; se você se importa com esse desempenho, por que está armazenando 100 valores para uma matriz de 1000 x 1000? Isso significa que pelo menos 90% das linhas / colunas não possuem valores diferentes de zero e podem ser totalmente removidos da matriz. Se o padrão de valores diferentes de zero não mudar, considere remover as linhas sempre com zero dessa matriz e da matriz de destino; ele removerá cerca de 90% do esforço, deixando o desempenho das duas matrizes (100 2 , 1000 2 ) amplamente equivalente.

Phil H
fonte
Linhas e colunas vazias costumam ter função em relação a um problema (por exemplo, manter um mapeamento uniforme entre o número da linha e o local da imagem, por exemplo).
22412
Exatamente; tornar o desempenho em tempo de execução em torno de 10x pior apenas para manter um mapeamento que você pode armazenar em uma única matriz de 100 ints não é uma troca normal. Como a pergunta era sobre desempenho à medida que o tamanho da matriz era escalado, esse é um ponto muito importante, particularmente para o PETSc, como ele perguntou.
Phil H
3

Um modelo completo do desempenho do SpMV é apresentado neste documento . Mostra claramente que o limitador principal é a largura de banda, embora você possa diminuir a carga usando vários vetores. Depois disso, você se depara com limitações de problemas de instruções e um limite de instruções de gravação pendentes, acredito.

Matt Knepley
fonte