Quel est le surcoût de la multiplication matricielle clairsemée

10

La multiplication matricielle (Mat * Mat et Mat * Vec) est-elle proportionnelle au nombre de non-zéros ou à la taille de la matrice? Ou une combinaison des deux.

Et la forme.

Par exemple, j'ai une matrice 100 x 100 contenant 100 valeurs ou une matrice 1000 x 1000 contenant 100 valeurs.

Lors de la mise au carré de ces matrices (ou en les multipliant par des matrices similaires avec une rareté similaire), la première (100x100) sera-t-elle plus rapide que la seconde (1000x1000)? Cela dépend-il de l'emplacement des valeurs?

Si cela dépend de l'implémentation, je suis intéressé par la réponse pour PETSc.

Andrew Spott
la source

Réponses:

11

Le coût de la multiplication matricielle-vectorielle clairsemée évolue linéairement avec le nombre d'entrées non nulles, car chaque entrée est multipliée une fois par une entrée dans le vecteur.

Le coût de la multiplication matrice-matrice clairsemée dépend fortement de la structure des non-zéros. Par exemple, envisagez de mettre au carré une matrice clairsemée qui a une structure en pointe de flèche :A

A=(δ1β1δ2β2δn1βn1γ1γ2γn1δn),

alors a O ( n ) nonzeros, mais A 2 est dense. Il existe une interprétation bien connue du graphique de ce phénomène: chaque chemin de longueur 1 ou 2 dans le graphique de A devient une arête dans le graphique de A 2 (c'est-à-dire une entrée non nulle dans A 2 ).AO(n)A2AA2A2

Jack Poulson
la source
4

Premièrement, cela dépend de la mise en œuvre. Si vous implémentez une matrice clairsemée en tant que matrice dense et remplissez les non-zéros, elle sera mise à l'échelle avec la taille globale de la matrice. S'il est stocké sous forme de non-zéros, il évoluera en fonction du temps d'accès en fonction de la taille de la matrice.

O(r2n2)

Une chose à noter, cependant, est qu'il est inutile de stocker ce qui n'est pas là; si vous vous souciez de cette performance, pourquoi stockez-vous 100 valeurs pour une matrice 1000x1000? Cela signifie qu'au moins 90% des lignes / colonnes n'ont aucune valeur différente de zéro et pourraient être entièrement supprimées de la matrice. Si le modèle des valeurs non nulles ne change pas, envisagez de supprimer les lignes toujours toutes nulles de ceci et de la matrice cible; il supprimera environ 90% de l'effort, laissant les performances des deux matrices (100 2 , 1000 2 ) globalement équivalentes.

Phil H
la source
Les lignes et colonnes vides ont souvent une fonction par rapport à un problème (c'est-à-dire en gardant un mappage uniforme entre le numéro de ligne et l'emplacement dans une image par exemple) Il y aura cependant un compromis à ne pas supprimer.
meawoppl
Exactement; aggraver vos performances d'exécution d'environ 10 fois juste pour maintenir un mappage que vous pouvez stocker dans une seule matrice de 100 pouces n'est pas un compromis normal. Comme la question portait sur les performances en tant que taille de blanc des échelles matricielles, c'est un point assez important en particulier pour PETSc, comme il l'a demandé.
Phil H
3

Un modèle complet de performance SpMV est donné dans cet article . Cela montre clairement que le limiteur principal est la bande passante, bien que vous puissiez réduire la charge en utilisant plusieurs vecteurs. Après cela, vous rencontrez des limites de problème d'instructions et une limite sur les instructions d'écriture en suspens, je crois.

Matt Knepley
la source