Was ist der Overhead bei der Sparse-Matrix-Multiplikation?


10

Skaliert die Matrixmultiplikation (sowohl Mat * Mat als auch Mat * Vec) mit der Anzahl der Nicht-Nullen oder mit der Größe der Matrix? Oder eine Kombination aus beiden.

Was ist mit der Form?

Zum Beispiel habe ich eine 100 x 100-Matrix mit 100 Werten oder eine 1000 x 1000-Matrix mit 100 Werten.

Wird beim Quadrieren dieser Matrizen (oder beim Multiplizieren mit ähnlichen Matrizen mit ähnlicher Sparsity) die erste (100x100) schneller sein als die zweite (1000x1000)? Kommt es darauf an, wo die Werte sind?

Wenn es implementierungsabhängig ist, interessiert mich die Antwort für PETSc.

Antworten:


11

Die Kosten einer spärlichen Matrix-Vektor-Multiplikation skalieren linear mit der Anzahl der Einträge ungleich Null, da jeder Eintrag einmal mit einem Eintrag im Vektor multipliziert wird.

Die Kosten einer spärlichen Matrix-Matrix-Multiplikation hängen stark von der Struktur der Nicht-Nullen ab. Betrachten Sie beispielsweise das Quadrieren einer dünnen Matrix mit einer Pfeilspitzenstruktur :A

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

AO(n)A2AA2A2


4

Erstens ist es implementierungsabhängig. Wenn Sie eine dünn besetzte Matrix als dichte Matrix implementieren und die Nicht-Nullen ausfüllen, wird sie mit der Gesamtgröße der Matrix skaliert. Wenn es als Nicht-Null gespeichert wird, wird es skaliert, wenn die Zugriffszeit mit der Matrixgröße skaliert.

O(r2n2)

Eine Sache zu beachten ist jedoch, dass es keinen Sinn macht, zu speichern, was nicht da ist; Wenn Sie sich für diese Leistung interessieren, warum speichern Sie dann 100 Werte für eine 1000x1000-Matrix? Das bedeutet, dass mindestens 90% der Zeilen / Spalten überhaupt keine Werte ungleich Null haben und vollständig aus der Matrix entfernt werden können. Wenn sich das Muster der Nicht-Null-Werte nicht ändert, sollten Sie die Zeilen mit immer allen Nullen sowohl aus dieser als auch aus der Zielmatrix entfernen. Dadurch entfällt etwa 90% des Aufwands, sodass die Leistung der beiden Matrizen (100 2 , 1000 2 ) weitgehend gleichwertig ist.


Leere Zeilen und Spalten haben häufig eine Funktion in Bezug auf ein Problem (z. B. Beibehaltung einer einheitlichen Zuordnung zwischen der Zeilennummer und der Position in einem Bild). Es wird jedoch einen Kompromiss geben, der diese nicht beseitigt.
Meawoppl

Genau; Es ist kein normaler Kompromiss, die Laufzeitleistung um das 10-fache zu verschlechtern, nur um eine Zuordnung beizubehalten, die Sie in einem einzelnen Array von 100 Zoll speichern können. Da es um die Leistung als Leergröße der Matrixskalen ging, ist dies ein ziemlich wichtiger Punkt, insbesondere für PETSc, wie er fragte.
Phil H

3

Ein komplettes Modell der spmv Leistung in bestimmten dieser Arbeit . Es zeigt deutlich, dass der Hauptbegrenzer die Bandbreite ist, obwohl Sie die Belastung durch die Verwendung mehrerer Vektoren verringern können. Danach stoßen Sie auf Einschränkungen bei Anweisungsproblemen und auf eine Beschränkung für ausstehende Schreibanweisungen, glaube ich.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.