2016-04-08 6 views
1

Wörtlich möchte ich Einträge - maaaaany Einträge - in Sparse-Matrix von Armadillo-Modul zur Verfügung gestellt. Wenn ich dies tun, wie weiter unten (B Na X N^2-Matrix)Alle schnelleren Methoden zum Zuweisen der Einträge in Sparse-Matrix mit Armadillo-Bibliothek in C++

sp_cx_mat BB(Na*Na, N*N*Na);  
for (int i = 0; i < Na; i++){ 
    BB(span(i*N, (i + 1)*N - 1), span(i*N*N, (i + 1)*N*N - 1)) = B; 
} 

es so viel Zeit in Anspruch nimmt, dies zu tun. (N und Na ist etwa 64 oder mehr wie 128 ~) Gibt es eine effiziente Möglichkeit, dies schneller zu machen, einschließlich Kernel oder Optimierungseinstellungen? Ich verwende bereits Open BLAS Kernel und AVX Optimierungseinstellungen.

Antwort

0

Es gibt Overhead im Umgang mit dünn besetzten Matrizen. Sie sind nur für sehr große Matrizen vorgesehen, bei denen die überwiegende Mehrheit der Elemente (90% +) Null ist. Die interne Darstellung ist im Wesentlichen eine compressed Version der Matrix.

Wenn die Gesamtzahl der Elemente (Null und nicht Null) in den verfügbaren Speicher passen würde, könnte die Verwendung einer normalen dichten Matrix schneller sein. Dichte Matrizen haben nicht den Overhead der Komprimierung.

Manchmal ist es einfach einfacher, mehr Arbeitsspeicher zu installieren oder Ihre Algorithmen auf einer größeren Maschine auszuführen.