Soluzione
ottava sé è un'applicazione single-thread che gira su un core. È possibile ottenere ottava per utilizzare alcune librerie come ATLAS che utilizzano più core. Quindi, mentre Octave utilizza solo un core, quando si verifica un'operazione pesante, l'ottava chiama le funzioni in ATLAS che utilizzano molte CPU.
Sono stato in grado di farlo. Prima compila "ATLAS" dal codice sorgente e rendilo disponibile al tuo sistema in modo che l'ottava possa trovarlo e utilizzare quelle funzioni di libreria. ATLAS si sintonizza sul tuo sistema e sul numero di core. Quando si installa l'ottava dal sorgente e si specifica ATLAS, esso viene utilizzato, quindi quando l'ottava esegue un'operazione pesante come un'enorme moltiplicazione di matrice, ATLAS decide quante CPU utilizzare.
Non sono riuscito a farlo funzionare per Fedora, ma su Gentoo ho potuto farlo funzionare.
Ho usato questi due link: ftp://ftp.gnu.org/gnu/octave/
http://math-atlas.sourceforge.net/
Ho eseguito il seguente nucleo ottava prima e dopo ATLAS installazione:
tic
bigMatrixA = rand(3000000,80);
bigMatrixB = rand(80,30);
bigMatrixC = bigMatrixA * bigMatrixB;
toc
disp("done");
La moltiplicazione matrice va molto più veloce utilizzando più processori, che era 3 volte più veloce rispetto a prima con single core:
Without Atlas: Elapsed time is 3.22819 seconds.
With Atlas: Elapsed time is 0.529 seconds.
I tre librerie sto usando che accelerare le cose sono blas-atlas
, cblas-atlas
, lapack-atlas
.
Se l'ottava può utilizzare queste al posto delle librerie blas predefinite e lapack, quindi utilizzerà multi core.
Non è semplice e richiede un po 'di programmazione per ottenere l'ottava da compilare da sorgente con ATLAS.
Drabacks ad usare Atlas:
Questo software Atlas utilizza un sacco di spese generali di dividere il programma dell'ottava in più thread. Certo, va molto più veloce se tutto quello che stai facendo è un'enorme moltiplicazione di matrici, ma la maggior parte dei comandi non può essere multi-thread con l'atlante.Se estrarre ogni bit di potenza di elaborazione/velocità dai tuoi core è la massima priorità, allora avrai molta più fortuna semplicemente scrivendo il tuo programma da eseguire in parallelo con se stesso. (Dividi il tuo programma in 8 programmi equivalenti che funzionano su 1/8 del problema ed eseguili tutti contemporaneamente, quando tutti sono pronti, riassembla i risultati).
Atlas aiuta un singolo programma di ottava filettato a comportarsi un po 'più come un'app multi-thread ma non è un proiettile argentato. Atlas non renderà il tuo programma Octave a thread singolo il tuo core processor da 2,4,6,8. Noterai un aumento delle prestazioni, ma la spinta ti lascerà alla ricerca di un modo migliore per utilizzare tutto il processore. La risposta è scrivere il tuo programma per correre in parallelo con se stesso, e questo richiede molta abilità di programmazione.
Suggerimento
Metti la tua energia in vettorizzazione le operazioni più pesanti e distribuendo il processo su n discussioni funzionamento simultaneo. Se si sta aspettando troppo a lungo per l'esecuzione di un processo, molto probabilmente il frutto in sospensione più basso per accelerarlo utilizza un algoritmo o una struttura dati più efficiente.
Simile alla risposta di Eric, è possibile compilare Octave con le librerie di Math Kernel di Intel per ottenere l'utilizzo di più thread. MKL è gratuito per uso non commerciale. http://software.intel.com/en-us/articles/using-intel-mkl-in-gnu-octave – KevinC