Ich bin kürzlich auf dieses Papier gestoßen , das ein Schema zum Speichern von Speicher bei der Darstellung von Matrizen mit geringer Dichte beschreibt. Eine 32-Bit-Ganzzahl kann Zahlen bis zu ~ 4 Milliarden speichern. Aber wenn Sie eine PDE lösen, sind Sie parallel gegangen und haben das Problem aufgeteilt, lange bevor die Anzahl der Unbekannten bei 4 Milliarden liegt. Ihre Idee ist es, die Matrix für kleine Bandbreite neu zu ordnen. Anstatt die Indizes j
aller Nicht-Null-Spalten in einer bestimmten Zeile zu i
speichern, speichern sie den Versatz j - i
, dessen Größe aufgrund der Neuordnung tendenziell gering ist. Die Offsets können dann mit weniger Bits gespeichert werden als eine 32-Bit-Ganzzahl. Es gibt mehr Arithmetik zu tun, wenn über die Nicht-Null-Einträge der Matrix iteriert wird, aber die Einsparungen bei weniger Cache-Fehlschlägen machen dies mehr als wett. In diesem ArtikelSie wollten speziell 16-Bit-Indizes in einem hierarchischen Matrixformat verwenden, aber letztendlich ist es eine ähnliche Idee. Es gibt auch die Bibliothek zfp , die eher zum Komprimieren von Gleitkommadaten dient.
Da "Flops jetzt frei sind" und der Engpass der Speicherzugriff ist, scheinen diese Tricks wirklich vielversprechend, um den CPU-Cache besser zu nutzen.
Ich habe die meisten zitierten Werke dieser beiden Artikel durchsucht. Ich suche nach anderen Referenzen zur Effektivität des Bitpackens, zur spärlichen Matrix-Vektor-Multiplikation und nach anderen Problemen in der Computerwissenschaft . Ich stelle mir zum Beispiel vor, Sie könnten mit dieser Idee viel effizientere Datenstrukturen für Diagramme oder unstrukturierte Netze entwerfen.