Espace de stockage scilab
Fermé
pitchu
-
16 avril 2008 à 15:13
cs_mouezapeter Messages postés 2 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 25 mars 2015 - 25 mars 2015 à 17:37
cs_mouezapeter Messages postés 2 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 25 mars 2015 - 25 mars 2015 à 17:37
A voir également:
- Scilab stacksize
- Scilab - Télécharger - Édition & Programmation
- Aide table loi normale Scilab ✓ - Forum Matlab
- Aide Scilab : plot de la fonction porte - Forum Logiciels
2 réponses
normalement il y a un changement de version majeur (d'une version n.x vers n+1.0 ) tous les 18 mois et au moins un changement mineur (n.x à n.x+1) tous les 9 mois. La sortie de la version 5.0 est assez proche car ça fait plusieurs mois que des versions alpha sont en tests :
http://www.scilab.org/download/index_download.php?page=5.0-alpha-3
Philippe.
http://www.scilab.org/download/index_download.php?page=5.0-alpha-3
Philippe.
Bonjour pitchu,
La mémoire de scilab est gérée par une pile, il faut utiliser la fonction stacksize pour augmenter la taille de cette pile :
-->M=rand(1,10^7);//pas assez de place pour M
!--error 17
rand: stack size exceeded (Use stacksize function to increase it)
-->stacksize(10^8)//on augmente la taille de la pile
-->M=rand(1,10^7);//maintenant il y a assez de place
Cette pile (= la mémoire de scilab) est indexée par un pointeur qui ne peut prendre que 2^31 valeurs (grosso modo) on ne peut donc pas augmenter la taille de cette pile au delà de cette limite :
-->stacksize(10^9)
stacksize requested size is too big (max < 268435455)
!--error 112
Cannot allocate more memory
normalement cette limitation devrait disparaître dans les versions futures de scilab (5.x ou 6.x au plus tard).
Pour revenir à ton problème il faut savoir qu'il existe une deuxième pile qui est faite pour stocker les variables globales. Comme pour la mémoire courante, la taille de cette pile est modifiable (avec les mêmes limitations) en utilisant la fonction gstacksize(). Donc quand tu utilises gstacksize(n) tu modifies la taille de la pile des variables globales (et donc pas la mémoire courante) or tu n'utilises aucune variable globale donc cette modification n'a aucune incidence sur ton script :-)
conclusions :
1) commence ton script par stacksize(10^8) pour augmenter ton espace mémoire au maximum
2) repense ton script pour limiter le nombre de variables à manipuler (et consommer le moins de place mémoire dans des calculs intermédiaires)
3) si ça ne suffit pas il faudra attendra les version de scilab > 5.x pour voir disparaître cette limitation sur la taille de la pile ou te limiter à des images plus petites
Bonne chance,
Philippe.
La mémoire de scilab est gérée par une pile, il faut utiliser la fonction stacksize pour augmenter la taille de cette pile :
-->M=rand(1,10^7);//pas assez de place pour M
!--error 17
rand: stack size exceeded (Use stacksize function to increase it)
-->stacksize(10^8)//on augmente la taille de la pile
-->M=rand(1,10^7);//maintenant il y a assez de place
Cette pile (= la mémoire de scilab) est indexée par un pointeur qui ne peut prendre que 2^31 valeurs (grosso modo) on ne peut donc pas augmenter la taille de cette pile au delà de cette limite :
-->stacksize(10^9)
stacksize requested size is too big (max < 268435455)
!--error 112
Cannot allocate more memory
normalement cette limitation devrait disparaître dans les versions futures de scilab (5.x ou 6.x au plus tard).
Pour revenir à ton problème il faut savoir qu'il existe une deuxième pile qui est faite pour stocker les variables globales. Comme pour la mémoire courante, la taille de cette pile est modifiable (avec les mêmes limitations) en utilisant la fonction gstacksize(). Donc quand tu utilises gstacksize(n) tu modifies la taille de la pile des variables globales (et donc pas la mémoire courante) or tu n'utilises aucune variable globale donc cette modification n'a aucune incidence sur ton script :-)
conclusions :
1) commence ton script par stacksize(10^8) pour augmenter ton espace mémoire au maximum
2) repense ton script pour limiter le nombre de variables à manipuler (et consommer le moins de place mémoire dans des calculs intermédiaires)
3) si ça ne suffit pas il faudra attendra les version de scilab > 5.x pour voir disparaître cette limitation sur la taille de la pile ou te limiter à des images plus petites
Bonne chance,
Philippe.
Modifié par cs_mouezapeter le 25/03/2015 à 17:39
Seulement, voilà, des fois on n'a pas le choix de la taille de l'image et la réduire en petits morceaux peut être fastidieux à la main. Donc tu peux utiliser libpng libjpeg en C++ qui te donnent accès aux valeurs de l'image pour la découper ou autre (éventuellement refusionner des sparsed matrix).
C'est quand même dommage : Scilab est fait pour l'ingénierie, donc censé traiter de grosses données, très bonnes fonctions, mais à chaque fois ça pêche à cause de la mémoire, alors que ces fichiers sont très bien traités par Audacity par exemple, ou Kdenlive, Gimp...en version précompilée en tous cas. Peut-être existe-t-il une option de compilation pour y remédier à partir des sources?