On Fri, 10 Dec 2010 11:34:30 +0100 Eric Chatellier <chatellier@codelutin.com> wrote:
Bonjour,
Dans un projet, j'ai besoin de stocker dans le pire des cas de très grande matrices (avec un cas concret à 199*150*164*27 = 132175800 double).
Actuellement, ca échoue directement à l'initialisation de la matrice (Java Heap Space).
J'ai essayé avec une implémentation de matrice creuse (DoubleVector au lieu de DoubleBigVector) : ca fonctionne mais c'est très très lent.
Y a-t-il moyen d'améliorer les choses niveau mémoire sans que le temps soit augmenté ?
199*150*164*27 = 132175800 x 64-bit(8octect) ~ 1Go :( Donc c'est normal que ca explose :) Ton seul espoire est qu'il y ait beaucoup de valeur identique dans la matrice et d'utiliser comme tu le fait un autre backend que DoubleBigVector. Peut-etre regarde si celui que tu utilises ne serait pas optimisable. (Mais si jamais tu tombes sur une matrice bien pleine ca va exploser chez l'utilisateur :() Une autre idee est d'utiliser un backend en float on divise par 2 la taille necessaire mais on perd en precision (et y'aura plein de conversion). Et on ne fait que repousser le probleme. Mais je ne vois pas vraiment de solution mirable :(. La meilleur solution serait je pense de creer des sous ensemble de matrice suivant le besoin au lieu d'une seul enorme. Couple ou non avec un changement de backend. Apres on peut aussi imaginer un backend avec des données mappe sur un fichier, mais j'ai peur qu'au niveau temps ce soit encore moins bon. -- Benjamin POUSSIN -------------------- tél: +33 (0) 2 40 50 29 28 email: poussin@codelutin.com () campagne du ruban ascii http://www.codelutin.com /\ pour les mails en ascii