Le 10/12/2010 12:26, Benjamin POUSSIN a écrit :
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. La solution est de créer une matrices vide contenant seulement les dimentions avec leur sémantiques (proxy) et que la fonction getSubMatrix() utiliser un provider pour retourner une matrices valorisé. Le problème est contourné dans le sens où la matrice ne contiendra que les données demandé par l'utilisateur.
-- Éric <chatellier@codelutin.com> Tel: 02 40 50 29 28 http://www.codelutin.com