2010-01-15 25 views
6

Tengo que multiplicar 2 (la mayoría de las veces) matriz dispersa. Esas matrices son bastante pequeñas (aproximadamente 10k * 10k) y tengo dos núcleos Xeon Quad y solo un hilo para este trabajo.matriz de multiplicación de java (FAST)

¿hay alguna biblioteca rápida para la moltiplicación de hilos múltiples? cualquier otro consejo?

Respuesta

4

Lo intentaría Colt, de CERN. Ahora es un poco viejo, pero aún ofrece bibliotecas excelentes para lo que estás intentando.

Para el procesamiento en paralelo, pruebe el más reciente Parallel Colt.

+0

Exactamente lo que estaba a punto de publicar. – BobMcGee

+0

¿Estás seguro de que puedo crear una matriz de 10k * 10k? – BigG

+0

Claro, eso es solo 800 MB (para el doble). Asegúrese de estar utilizando una JVM de 64 bits. –

1
+0

tengo 8 núcleos a 2,6GHz y solo uso uno de ellos – BigG

+0

http://jscience.org/ –

+1

Si está haciendo una multiplicación de precisión simple, una implementación GPGPU que se ejecute en una buena tarjeta gráfica puede * todavía * vencer a los 8 núcleos. GPGPU puede ser de 10x a 100x más rápido que la CPU, ya que tiene tantos procesadores de flujo (cientos en chips modernos). – BobMcGee

-1

Sí, hay bibliotecas para la multiplicación de matrices de subprocesos múltiples; deja que Google sea tu amigo Sin embargo, si solo tiene un hilo, es posible que no sea necesario realizar varios subprocesos. ¿Por qué tienes solo un hilo en una máquina de 8 núcleos? Una biblioteca a considerar es la interfaz Java BLAS.

Definitivamente está tomando el enfoque correcto, buscando una biblioteca en lugar de tratar de escribir esto usted mismo.

+0

Es confuso, pero creo que OP está tratando de decir que él/ella no ha multiprocesado el algoritmo ya, por lo tanto, una implementación multiproceso de LA sería útil. (?) – Chinasaur

2

Con el debido respeto a Colt y Parallel Colt, no son muy rápidos. Si insiste en usar Java y espera cálculos numéricos rápidos, use JBLAS. JBLAS usa ATLAS. He compilado JBLAS para usar ATLAS multiproceso: no lo hace de manera predeterminada. Debería cambiar algunas opciones de configuración. Sin embargo, incluso JBLAS de un solo hilo es más rápido que el Colt de varios hilos y el Colt paralelo. Probé Colt, Parallel Colt, JAMA y JBLAS. JBLAS es el mejor en una milla de campo.

Colt y Parallel Colt son muy lentos. También lo es JAMA. La mejor biblioteca en Java para tales cosas es JBLAS.

0

¿Miraste el Java Matrix Benchmark? Compara el rendimiento entre varios de los paquetes de álgebra lineal de java más comunes, incluida una pareja que usa/llama código nativo. La multiplicación de matrices es, por supuesto, una de las cosas probadas/comparadas y la última ejecución de referencia se realizó en realidad con una máquina Intel Xeon Quad-Core dual.

Lo que no se ve es cómo funcionan estas bibliotecas usando matrices dispersas (o si son compatibles con eso en absoluto).

Es posible obtener un muy buen rendimiento con una implementación pura de Java, pero si quiere el mejor rendimiento posible con matrices tan grandes, tiene que "dejar la JVM".

+0

No me di cuenta hasta ahora que esta pregunta tenía más de 5 años ... – apete