2010-01-15 13 views
6

Devo moltiplicare 2 (la maggior parte delle volte) matrice sparsa. Queste matrici sono piuttosto piccole (circa 10k * 10k) e ho due core Xeon Quad e solo un thread per questo lavoro?java matrix-moltiplicazione (FAST)

esiste una libreria veloce per la moltiplicazione multi-thread? qualche altro consiglio?

risposta

4

Proverei Colt, dal CERN. È un po 'vecchio ora, ma fornisce comunque eccellenti librerie per quello che stai provando.

Per l'elaborazione parallela, provare il nuovo Parallel Colt.

+0

Esattamente quello che stavo per postare. – BobMcGee

+0

sei sicuro di poter creare una matrice 10k * 10k? – BigG

+0

Certo, sono solo 800 MB (per il doppio). Assicurati di utilizzare una JVM a 64 bit. –

1
+0

ho 8 core 2,6 GHz e ne uso solo uno – BigG

+0

http://jscience.org/ –

+1

Se si sta eseguendo la moltiplicazione a precisione singola, un'implementazione GPGPU in esecuzione su una buona scheda grafica potrebbe * ancora * battere gli 8 core. GPGPU può essere da 10x a 100 volte più veloce della CPU, dal momento che ha così tanti processori di streaming (centinaia di chip moderni). – BobMcGee

-1

Sì, esistono librerie per la moltiplicazione di matrici a più thread; lascia che Google sia tuo amico. Anche se hai solo un thread, il multithreading potrebbe non essere necessario. Perché hai una sola discussione su una macchina a 8 core? Una libreria da considerare è l'interfaccia BLAS Java.

Stai decisamente prendendo l'approccio giusto, cercando una libreria piuttosto che provare a scrivere da solo.

+0

È confuso, ma credo che OP stia cercando di dire che non ha già multithreadato l'algoritmo, quindi sarebbe utile una implementazione multithread della LA. (?) – Chinasaur

2

Con il dovuto rispetto per Colt e Parallel Colt, non sono molto veloci. Se si insiste sull'uso di Java e si aspettano calcoli numerici veloci, utilizzare JBLAS. JBLAS utilizza ATLAS. Ho compilato JBLAS per utilizzare l'ATLAS multithreading: non lo fa per impostazione predefinita. Dovresti modificare alcune opzioni di configurazione. Tuttavia, anche il JBLAS a thread singolo è più veloce di Colt multithread e Parallel Colt. Ho testato Colt, Parallel Colt, JAMA e JBLAS. JBLAS è il migliore di un miglio di campagna.

Colt e Parallel Colt sono molto lenti. Quindi è JAMA. La migliore libreria di Java per queste cose è JBLAS.

0

Hai guardato il Java Matrix Benchmark? Confronta le prestazioni tra molti dei più comuni pacchetti di algebra lineare java, incluso un paio che usa/chiama il codice nativo. La moltiplicazione della matrice è ovviamente una delle cose testate/confrontate e l'ultima esecuzione benchmark è stata effettivamente eseguita con una macchina Intel Xeon quad-core doppia.

Quello che non si vede è come queste librerie funzionano con matrici sparse (o se lo supportano affatto).

È possibile ottenere prestazioni molto buone con una pura implementazione Java, ma se si desidera la migliore prestazione possibile con le matrici così grandi è necessario "lasciare la JVM".

+0

Non ho notato fino ad ora che questa domanda aveva più di 5 anni ... – apete