Les performances de Java matrice bibliothèques de mathématiques?

Nous sommes le calcul de quelque chose dont l'exécution est liée par des opérations matricielles. (Quelques détails ci-dessous si vous êtes intéressé.) Cette expérience nous a amenés à la question suivante:

Ne folkloriques ont de l'expérience avec les performances des bibliothèques Java pour la matrice de mathématiques (par exemple, multiplier, inverse, etc.)? Par exemple:

J'ai cherché et rien trouvé.


Détails de notre système de comparaison de la vitesse:

Nous sommes à l'aide d'Intel FORTRAN (ifort (IFORT) 10.1 20070913). Nous avons ré-implémenté en Java (1.6) à l'aide d'Apache commons mathématiques 1.2 matrice de la fpo, et il convient à tous ses chiffres de précision. (Nous avons des raisons pour vouloir en Java.) (Java doubles, Fortran real*8). Fortran: 6 minutes, Java 33 minutes), de même machine. jvisualm profilage montre beaucoup de temps passé dans RealMatrixImpl.{getEntry,isValidCoordinate} (qui semblent avoir disparu d'inédits Apache commons mathématiques 2.0, mais le 2.0 n'est plus rapide). Fortran est l'aide de l'Atlas routines BLAS (dpotrf, etc.).

Évidemment, cela dépend de notre code dans chaque langue, mais nous pensons que la plupart du temps, c'est l'équivalent de la matrice des opérations.

Dans plusieurs autres calculs qui n'impliquent pas de bibliothèques, Java n'a pas été beaucoup plus lent, et parfois beaucoup plus rapide.

  • La complexité de la matrice de mathématiques ops sont au moins O(n^3)... pire venir en pire, je suppose que vous pourriez de temps et de test...
  • Pourquoi avez-vous besoin d'inverses? Pour presque toutes les applications, vous n'avez pas besoin du réel inverse. Le calcul de l'inverse est une mauvaise idée à cause de problèmes de stabilité.
  • Oui, nous pourrions le temps. Je me demandais si d'autres l'avaient déjà fait. @Ying Xiao: Oui, inverses sont à éviter. Cependant, ce calcul semble la plus simple de l'utiliser. Voir en.wikipedia.org/wiki/....
  • C'est faux, il y a des méthodes plus efficaces que O(n^3) à l'aide d'une division et de conquête de l'approche.
  • Oui, O(n^log2(7)) est au moins possible. Il est illustré par de Strassen et est assez simple à mettre en œuvre. Il y a de mieux asymptotique des fois si, mais ils peuvent avoir infaisable grandes constantes.
  • La plus rapide des performances natives est de JCublas. Si vous avez besoin rapide de l'algèbre linéaire, vous avez besoin de Gpu. JOCL avec clMath peut également travailler et être portables pour les Processeurs (et même multi-plate-forme de w/o recompiler), mais je n'ai pas testé.