Lösung
Octave selbst ist eine Single-Thread-Anwendung, die auf einem Kern läuft. Sie können Oktaven verwenden, um einige Bibliotheken wie ATLAS zu verwenden, die mehrere Kerne verwenden. Während Octave nur einen Kern verwendet, ruft Octave bei einer schweren Operation Funktionen in ATLAS auf, die viele CPUs verwenden.
Ich konnte dies tun. Kompilieren Sie zunächst 'ATLAS' aus dem Quellcode und stellen Sie es Ihrem System zur Verfügung, damit Octave es finden und diese Bibliotheksfunktionen verwenden kann. ATLAS stellt sich auf Ihr System und die Anzahl der Kerne ein. Wenn Sie eine Oktave von der Quelle installieren und ATLAS angeben, wird sie verwendet. Wenn also die Oktave eine schwere Operation wie eine große Matrixmultiplikation ausführt, entscheidet ATLAS, wie viele CPUs zu verwenden sind.
Ich konnte dies nicht für Fedora, aber auf Gentoo konnte ich es zur Arbeit bringen.
habe ich diese beiden Links: ftp://ftp.gnu.org/gnu/octave/
http://math-atlas.sourceforge.net/
ich folgende Oktave Kern vor und nach dem ATLAS lief installieren:
tic
bigMatrixA = rand(3000000,80);
bigMatrixB = rand(80,30);
bigMatrixC = bigMatrixA * bigMatrixB;
toc
disp("done");
Die Multiplikation Matrix geht viel schneller mit mehrere Prozessoren, die war dreimal schneller als zuvor mit Single-Core:
Without Atlas: Elapsed time is 3.22819 seconds.
With Atlas: Elapsed time is 0.529 seconds.
Die drei Bibliotheken, die ich welcher Geschwindigkeit die Dinge bin mit sind blas-atlas
, cblas-atlas
, lapack-atlas
.
Wenn octave diese anstelle der Standard-Blas- und lapack-Bibliotheken verwenden kann, verwendet es Multi-Core.
Es ist nicht einfach und erfordert einige Programmierkenntnisse, um die Oktave aus der Quelle mit ATLAS zu kompilieren.
Drabacks zu Atlas mit:
Dieser Atlas Software eine Menge Overhead verwendet Ihre Oktave Programm in mehrere Threads aufgeteilt. Sicher, es geht viel schneller, wenn Sie nur riesige Matrix-Multiplikationen machen, aber die meisten Befehle können nicht durch Atlas multi-threaded sein.Wenn es oberste Priorität hat, jedes Bit Prozessorleistung/Geschwindigkeit aus Ihren Kernen zu extrahieren, dann haben Sie viel mehr Glück, wenn Sie Ihr Programm schreiben, damit es parallel zu sich läuft. (Teilen Sie Ihr Programm in 8 gleichwertige Programme auf, die an 1/8 des Problems arbeiten und führen Sie alle gleichzeitig aus, wenn alle fertig sind, setzen Sie die Ergebnisse wieder zusammen).
Atlas hilft einem eintönigen Oktavprogramm, sich ein wenig mehr wie eine Multithread-App zu verhalten, aber es ist keine Wunderwaffe. Atlas wird Ihr Single-Threaded-Octave-Programm nicht aus Ihrem 2,4,6,8-Core-Prozessor machen. Sie werden eine Leistungssteigerung bemerken, aber der Boost wird Sie auf der Suche nach einer besseren Möglichkeit zur Verwendung des gesamten Prozessors verlassen. Die Antwort ist, dass Sie Ihr Programm so schreiben, dass es parallel zu sich selbst läuft, und das erfordert eine Menge Programmierkenntnisse.
Anregung
Setzen Sie Ihre Energie in Ihren schwersten Operationen Vektorisierung und den Prozess über n gleichzeitige laufende Threads verteilen. Wenn Sie zu lange darauf warten, dass ein Prozess ausgeführt wird, verwenden Sie wahrscheinlich einen effizienteren Algorithmus oder eine effizientere Datenstruktur.
Ähnlich Eric Antwort, können Sie Octave mit Intels Math Kernel-Bibliotheken kompilieren, damit es mehrere Threads verwenden. Das MKL ist kostenlos für nicht-kommerzielle Nutzung. http://software.intel.com/en-us/articles/using-intel-mkl-in-gnu-octave – KevinC