Gürteltier-Linearsystem-Löser (mit openblas)

Ich habe verschiedene Open-Source-Codes getestet, um ein lineares Gleichungssystem in C ++ zu lösen. Bisher ist das Gürteltier das schnellste, das ich je gefunden habe, auch mit dem OPENblas-Paket. Um ein dichtes lineares NxN-System zu lösen, bei dem N = 5000 auf meinem System ungefähr 8,3 Sekunden dauert, ist das wirklich sehr schnell (ohne installierte openblas sind es ungefähr 30 Sekunden).

Ein Grund für diesen Anstieg ist, dass Gürteltier + Openblas die Verwendung mehrerer Threads zu ermöglichen scheint. Es läuft auf zwei meiner Kerne, während Gürteltier ohne openblas nur 1 verwendet. Ich habe einen i7-Prozessor, also möchte ich die Anzahl der Kerne erhöhen und es weiter testen. Ich benutze Ubuntu, daher kann ich in der openblas-Dokumentation im Terminal Folgendes tun:

export OPENBLAS_NUM_THREADS = 4

Das erneute Ausführen des Codes scheint jedoch weder die Anzahl der verwendeten Kerne noch die Geschwindigkeit zu erhöhen. Mache ich etwas falsch oder ist die 2 die maximale Menge für die Verwendung von Gürteltier "lösen (A, B)" -Befehl? Ich konnte den Quellcode von armadillo nirgendwo finden, um einen Blick darauf zu werfen.

Übrigens kennt jemand die Methoden Gürteltier / Openblas zum Lösen von Ax = b (Standard-LU-Zerlegung mit Parallelität oder etwas anderem)? Vielen Dank!

edit: Eigentlich scheint die Anzahl der Kerne, die bei 2 hängen bleiben, ein Fehler zu sein, wenn openblas mit dem synaptic package manager installiert wirdsiehe hier. Durch die Neuinstallation von der Quelle aus kann festgestellt werden, wie viele Kerne ich aktuell habe (8). Jetzt kann ich mit export OPENBLAS_NUM_THREADS = 4 etc regeln.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage