Ich weiß, dass Sparse-Matrix in Gürteltier ist noch in der vorläufigen Unterstützung. Ich benutze Armadillo Lib in meiner Quantensystemforschung und ich habe Probleme, sparse Mat in effektiver RAM-Weise zu konstruieren.Armadillo: effiziente RAM sparse Batch-Insertion
Bisher habe ich meine eigene Implementierung von Sparse-Matrizen verwendet, aber ich möchte eine optimierte Matrixklasse haben.
Ich Elemente im Batch-Modus Füllung:
umat loc(2,size);
cx_vec val(size);
// calculate loc and val
...
//
sp_cx_mat Hamiltonian(loc, val);
Diese Art von Aktion Kopie Werte von loc, val Konstruktor von Hamilton-und für einige wenige Sekunden benötigen 2x RAM. Ich berechne eine riesige Matrix (Größe ist ungefähr 2 ** L, wobei L = 22, 24, ...), also wünschte ich, ich hätte den Code im Speicher gut optimiert. Zum Vergleich Matrixgröße: 705432x705432 - RAM und "Füllzeit":
meiner Implementierung (COO-Format): Zeit
7.95s
, Speicher317668kB
Gürteltier (CSC-Format): Zeit
5.32s
, Speicher715000kB
Ist es möglich, Fragmente von Vektoren ausplanen: loc
, val
on the fly durch Elementspeicher, Element zu retten?
Also wenn ich mein Verständnis richtig ist, hat Konstruktor mit COO-Format RAM "Verbrauch" in CSC-Format zu konvertieren, wenn ich Konstruktor mit CSC-Format verwende ich RAM sparen, weil ich nicht solche Umwandlung tun werde? – andywiecko