Page 3 sur 7

Re: Firmware Delta N0110: calcul formel GIAC même en mode ex

Message non luPosté: 12 Oct 2019, 11:14
de Lionel Debroux
Ils font quoi avec le reste de la RAM ?

La pile bien sûr, mais beaucoup de pré-réservation (allocation statique) de structures de données qui ne seront souvent pas réellement utilisées par les utilisateurs, suivant l'utilisation qu'ils font de la calculatrice.

Re: Firmware Delta N0110: calcul formel GIAC même en mode ex

Message non luPosté: 12 Oct 2019, 11:42
de jean-baptiste boric
cent20 a écrit:Ma question est surement très bête mais la RAM fait 256 ko, ils ne réservent que 16ko à Python, c'est ridiculement faible. Ils font quoi avec le reste de la RAM ? Je veux bien qu'il faille faire tourner l'OS, gérer les interactions claviers, etc mais aucune raison de réserver 240 ko de RAM pour ça ...


NumWorks part du principe que l'allocation dynamique généraliste est à éviter à tout prix car sur la calculatrice un malloc qui échoue entraîne un reset. Contrairement à la concurrence, il n'y a pas de notion de mémoire utilisateur. En mesurant au doigt mouillé, actuellement la RAM contient la pile (32 KiB), le stockage des scripts Python (16 KiB), un tas spécifique pour les expressions mathématiques (32 KiB), un buffer des données runtime des apps (~57 KiB) incluant le tas de 16 KiB de MicroPython, les données applicatives (~30 KiB), d'autres choses que je n'ai pas identifié (~28 KiB) et le tas prenant le reste (~62 KiB).

Avec le patch pour passer les données runtime des apps en allocation dynamique, on pourrait augmenter significativement la taille du tas MicroPython... mais ça plante si j'augmente au-delà de 28 KiB et je ne sais pas pourquoi... :?

Re: Firmware Delta N0110: calcul formel GIAC même en mode ex

Message non luPosté: 12 Oct 2019, 14:23
de parisse
Et c'est la qu'on voit que la taille de la flash de la N100 et de la RAM des 2 modeles est vraiment handicapante. Avec 1M de ram+8M de flash des le debut, je pense que l'allocation dynamique n'echouerait presque jamais, il n'aurait peut-etre pas ete necessaire de securiser les apps en pre-allouant la place necessaire et Numworks aurait pu investir le temps de developpement correspondant a securiser les donnees dans la flash en cas de reset. Mais bon, ce qui est fait est fait, tentons d'exploiter au mieux ce qu'on a, il y a quand meme de quoi faire des choses tres interessantes.
@jbboric: ca plante avec le malloc de newlib ou avec le malloc de Numworks?

Re: Firmware Delta N0110: calcul formel GIAC même en mode ex

Message non luPosté: 12 Oct 2019, 14:54
de jean-baptiste boric
parisse a écrit:@jbboric: ca plante avec le malloc de newlib ou avec le malloc de Numworks?


Le malloc de NumWorks. Un de ces jours il faudra que j'expérimente epsilon avec newlib.

Re: Firmware Delta N0110: calcul formel GIAC même en mode ex

Message non luPosté: 12 Oct 2019, 15:06
de zardam
Ça finit de la même façon avec les deux il me semble ( -> abort() ), mais le malloc de la newlib me semble beaucoup plus avancé que celui de la liba.

Re: Firmware Delta N0110: calcul formel GIAC même en mode ex

Message non luPosté: 13 Oct 2019, 09:05
de parisse
Bon, j'ai teste l'allocation dynamique des apps, mais je ne vais pas l'utiliser, ca a l'air trop instable, probablement parce que giac fragmente le tas et apres si on ouvre une appli un peu gourmande, reset. J'ai mis un flag de compilation (MALLOC_APPS) qu'on peut activer ou pas dans scripts/config.mak.
J'en reste donc a enlever regressions, avec 72K de tas.
D'ailleurs avec la newlib, y-a-t-il moyen de detecter la quantite de memoire disponible restante sur le tas?

Un peu de temps perdu a cause de la memoire RAM trop faible :-( D'ailleurs en regardant rapidement l'historique des firmwares depuis l'an dernier, j'ai le sentiment que le rythme des ameliorations est plutot lent, se rapprochant de la concurrence, peut-etre bien justement a cause des contraintes memoire.

Cote developpement, je suis en train de bien avancer sur l'editeur de programmes (on peut le tester en tapant + EXE depuis le shell) qui sera plus confortable que celui de Numworks:
* affichage complet des lignes trop longues sur 2 lignes (ou plus), pas la peine de defiler horizontalement
* parenthese/[]/{} match
* choix de 2 tailles de caracteres pour pouvoir mieux visualiser un programme un peu long
* possibilite d'inserer le source d'un autre programme dans le programme courant, de sauvegarder sous un autre nom
* copier/coller
* bientot recherche/remplacement et surtout possibilite de tester la syntaxe directement depuis l'editeur (ca fonctionne plus ou moins mais il y a encore quelques bugs ou manques dans l'interface)
Je ne sais pas trop comment gerer les touches menu, vu que j'ai besoin de deux menus: un pour l'editeur, l'autre pour les commandes Khicas. Pour le moment, Toolbox renvoie sur Khicas, et Ans sur le menu editeur. Peut-etre vaut-il mieux inverser?

Re: Firmware Delta N0110: calcul formel GIAC même en mode ex

Message non luPosté: 13 Oct 2019, 09:13
de Lionel Debroux
J'en reste donc a enlever regressions, avec 72K de tas.

Ca ne va pas faire de miracles: dans mes tests, ça gagnait de la place tant qu'on laissait le tas MicroPython à la taille minuscule de 16 KB, mais assez peu en ayant élargi ce tas à 32 KB. Comme moi, tu risques de devoir jouer sur des paramètres additionnels comme le nombre de noeuds.

Re: Firmware Delta N0110: calcul formel GIAC même en mode ex

Message non luPosté: 13 Oct 2019, 09:50
de parisse
Je suis pour le moment oblige de laisser le tas micro-python a 16K pour avoir 72K de tas.
A terme, si je vire completement l'UI de Numworks de Khicas (ce qui serait une solution au probleme des licences incompatibles), je pourrai peut-etre augmenter le tas micro-python. Il me reste a porter la console de Casio pour faire ca et aussi voir comment gerer mieux ON/OFF (luminosite, affichage du statut de la batterie), eventuellement aussi l'echange de fichiers par DFU (l'UI portee de Casio ne fonctionne pas du tout sur le modele oriente objet de Numworks, auquel j'avoue d'ailleurs ne pas comprendre grand chose. Il n'y a pas de hierarchie de classes qui s'affichent dans ce que je porte, on prend le controle de tout l'ecran et on ecrit dessus, et on attend la frappe d'une touche pour retracer l'ecran)

Re: Firmware Delta N0110: calcul formel GIAC même en mode ex

Message non luPosté: 04 Nov 2019, 22:17
de parisse
Je mets en ligne une version beta de la documentation de Khicas pour Numworks
https://www-fourier.univ-grenoble-alpes.fr/~parisse/numworks/khicasnw.html
Il y a une section qui explique comment ajouter sa propre application au menu des applications tierces de KhiCAS (Home 1 ou shift-ANS).

Re: Firmware Delta N0110: calcul formel GIAC même en mode ex

Message non luPosté: 16 Nov 2019, 12:37
de parisse
Delta+KhiCAS est sur le point de passer en version beta. Afin de bien clarifier au niveau des licences, il faut distinguer deux projets
1/ Delta est l'ensemble des modifications apportees a Epsilon, qui sont donc sous la meme licence que Epsilon.
2/ KhiCAS qui est sous licence GPL.
Ces deux projets donnent lieu chacun a un firmware, le firmware Delta etant capable de lancer un firmware externe en adresse fixe via une application nommee Extension ou en tapant sur HOME quand on est dans Home, ce firmware externe peut etre n'importe quel firmware configure pour avoir sa fonction "main" en 0x92000000, en particulier KhiCAS est un firmware externe de ce type.

En grattant a droite et a gauche pour economiser la RAM, il est possible d'utiliser la version 12.2 d'Epsilon au complet (y compris l'app Regression qu'on avait enlevee dans un premier temps). On a donc en quelque sorte 2 calculatrices independantes et on passe de l'une a l'autre par des appuis successifs sur HOME.

Je suis en train de regler les parametres de Delta en essayant de faire au mieux.
Je vais essayer avec les parametres suivants:
pool Poincare (poincare/include/poincare/tree_pool.h) 16384 "unites" de 5/3 ce qui fait un peu plus de 27 000 octets (moitie moins que Epsilon).
tas pour MicroPython (apps/code/app.h) 21280 octets (soit 30% de plus que Epsilon sans modification)
zone de stockage (ion/include/ion/storage.h): 18408 au lieu de 16384

Voici les raisons de mon choix:
pour la zone de stockage: il s'agit de tenir compte de la sauvegarde de la session courante de KhiCAS. 2K de plus c'est peu, mais si on augmente plus il faut diminuer le tas MicroPython ou mordre sur la RAM pour KhiCAS.
pour le tas MicroPython: c'est le maximum possible sans changer la taille du snapshot des applications.
pour Poincare: les calculs un peu intensifs ont tout interet a etre fait dans KhiCAS. Par exemple, j'ai teste le calcul suivant det(1/a^32) ou a est une matrice 4x4 a coefficients entiers entre 0 et 10, il y a un rapport de vitesse de 50 environ.
Le pool de Poincare devrait donc etre affecte en priorite aux apps (fonction, suite, etc.) et aux petits calculs lorsque l'utilisateur prefere l'entree naturelle en 2-d de Calculs vs en 1-d ou avec l'editeur d'expressions 2-d dans KhiCAS.
Au final sur les 256K de RAM, il y a dans cette configuration environ 70K de RAM pour KhiCAS (dont 8K pour eviter les risques de debordements), 87K pour le snapshot d'Epsilon, 26K de pool Poincare, 18K de storage partage, 32K de stack, le reste en variables globales diverses initialise ou non.
Si le pool Poincare est insuffisant, on peut bien sur l'augmenter un peu (mais pas au niveau du firmware d'origine Epsilon...).

Apres bien sur chacun est libre de changer les valeurs de ces parametres pour son propre usage et recompiler Delta+Khicas.
La doc est la:
https://www-fourier.univ-grenoble-alpes.fr/~parisse/numworks/khicasnw.html#sec32