Ein kleiner Hintergrund: Ich interessiere mich für Forschung über spärliche Matrix * Vektor Multiplikation.Sind dünn besetzte Matrizen in der Regel in der Reihenfolge der größeren oder der größeren Reihenreihenfolge gespeichert?
Ich habe durch diese Datenbank schwach besetzte Matrizen suchen:
The University of Florida Sparse Matrix Collection
ich bemerkt, dass es drei Formate die Matrizen in verfügbar sind:
- MATLAB (.mat)
- Matrix Markt (.mtx)
- Harwell-Boeing (.rb)
Es scheint, dass die Matrizen in Spaltenhauptordnung gespeichert sind (d. H. Spalten werden nacheinander gespeichert und nicht direkt hintereinander. In der Literatur scheint es jedoch, dass das komprimierte Sparse-Zeilen- (CSR) -Format anscheinend das üblichste Format ist (siehe "Scientific Computing-Kernel auf dem Zellprozessor Samuel"). Ich weiß, dass irgendwie nur der Index (i, j) und der Wert an diesen Koordinaten gespeichert werden, aber ich denke, dass ich die Daten zuerst neu formatieren müsste, um die Matrix * Vektormultiplikation effizient durchzuführen.
Für meine Implementierung wäre es sinnvoller, die Daten in der Reihenfolge der Zeilenreihenfolge zu speichern, damit nacheinander auf die Elemente in einer Zeile zugegriffen werden kann, da sie in aufeinanderfolgenden Speicheradressen gespeichert würden.
Das CSR-Format scheint jedoch anzunehmen, dass die Daten in der Reihenfolge der Zeilenreihenfolge gespeichert werden. Also was ich frage mich, ist das: Wie werden Daten in der Regel für spärliche Matrizen im Speicher gespeichert? Und beinhaltet ein Teil der Vektorberechnung mit spärlichem Matrix * das Umgruppieren der Daten von der Reihenfolge der Spaltenmajor zur Reihe? Ich frage, weil ich frage mich, ob diese Konvertierung in Sparse Matrix Benchmark-Ergebnisse in der Regel berücksichtigt wird.
Fragen Sie speziell, wie MATLAB spärlich speichert Matrizen? – beaker
Spaltenhauptformat folgt Fortran's Konventionen. Für M * v ist die Zeile major besser, als Sie bereits herausgefunden haben. – karakfa
@becher, nein. Ich frage mich, wie eine Anwendung in der Regel die Daten im Speicher speichern würde, ist es zuerst in der Reihenfolge der großen Spalte und dann muss dann in Zeile größere Reihenfolge konvertieren? ODER, ist es in der Regel in Ordnung, Ihre Daten einfach in das CSR-Format zu formatieren, ohne den Overhead dafür zu berücksichtigen, wenn Sie Benchmark-Ergebnisse angeben? – Veridian