7
votes

Java Matrix-Multiplication (rapide)

Je dois multiplier 2 (la plupart des temps) Matrix clairsemé. Ces matrices sont assez bits (environ 10k * 10k) et j'ai un deuxième noyau Xeon Quad et un seul fil pour ce travail?

Y a-t-il une bibliothèque rapide pour une moltiplication multi-thread? tout autre conseil?


0 commentaires

5 Réponses :


1
votes

2 commentaires

J'ai 8 noyaux 2,6ghz et j'en utilise juste l'un d'eux


Si vous faites une multiplication à une précision unique, une implémentation GPGPU fonctionnant sur une bonne carte graphique peut toujours battre les 8 cœurs. GPGPU peut être de 10x à 100 fois plus rapidement que la CPU, car il possède tant de processeurs de flux (centaines de copeaux modernes).



-1
votes

Oui, il existe des bibliothèques pour la multiplication de matrice multi-filetés; Laissez Google être votre ami. Bien que si vous n'avez qu'un seul filtre multithreading peut ne pas être nécessaire. Pourquoi n'avez-vous qu'un seul fil sur une machine à 8 noyau? Une bibliothèque à considérer est l'interface Java Blas.

Vous prenez vraiment la bonne approche, à la recherche d'une bibliothèque plutôt que d'essayer de vous écrire vous-même.


1 commentaires

C'est déroutant, mais je crois que OP essaie de dire qu'il / elle n'a pas déjà multiplié l'algorithme, donc une mise en œuvre multithreadée de la LO serait utile. (?)



4
votes

Je voudrais essayer Colt , du CERN. C'est un peu vieux maintenant, mais fournit toujours d'excellentes bibliothèques pour ce que vous essayez.

Pour le traitement parallèle, essayez le plus récent Colt parallèle .


4 commentaires

Exactement ce que j'étais sur le point de poster.


Êtes-vous sûr de pouvoir créer une matrice 10k * 10k?


Bien sûr, ce n'est que 800 Mo (pour le double). Assurez-vous d'utiliser un JVM 64 bits.


Oh, et c'est rare. Aucun problème.



3
votes

avec du respect de Colt et du Colt parallèle, ils ne sont pas très rapides. Si vous insistez sur l'utilisation de Java et d'attendre des calculs numériques rapides, utilisez JBLAS. Jblas utilise Atlas. J'ai compilé Jblas pour utiliser Atlas multithreaded - il ne le fait pas par défaut. Vous auriez besoin de modifier quelques options de configuration. Cependant, même les jblas filetés simples sont plus rapides que le colt multithreadé et le colt parallèle. J'ai testé Colt, parallèle Colt, Jama et Jblas. Jblas est le meilleur par un mile de pays.

Colt et Colt parallèle sont très lents. Donc, Jama. La meilleure bibliothèque de Java pour de telles choses est Jblas.


0 commentaires

0
votes

Avez-vous regardé le Benchmark Java Matrix ? Il compare les performances entre plusieurs des packages d'algèbre linéaire Java les plus courants, y compris un couple qui utilise / appel de code natif. La multiplication de matrice est bien sûr l'une des choses testées / comparées et la dernière exécution de référence a été effectuée en réalité une machine à double quad-core Intel Xeon.

Ce que vous ne voyez pas, il y a comment ces bibliothèques effectuent en utilisant des matrices clairsemées (ou s'ils le soutiennent du tout).

Il est possible d'obtenir de très bonnes performances avec une implémentation pure Java, mais si vous voulez la meilleure performance possible avec des matrices que vous devez "laisser le JVM".


0 commentaires