π
<-
Chat plein-écran
[^]

NumWorks Omega 1.21 : 100K de heap pour scripts Python !

NumWorks Omega 1.21 : 100K de heap pour scripts Python !

Message non lude Admin » 29 Avr 2021, 20:59

Les interpréteurs MicroPython ou similaires qui tournent sur nos calculatrices font appel à différents types de mémoires :
  • La mémoire de stockage, qui contient physiquement tes scripts prêts à l'emploi.
  • La pile (stack) qui référence, à l'exécution, les objets Python créés. Sa capacité limite donc le nombre d'objets Python pouvant coexister simultanément en mémoire.
  • Le tas (heap) qui stocke, à l'exécution, le contenu des objets Python créés. Il limite donc la taille globale utilisée pour les données de ces différents objets.
Le langage Python est un très gros consommateur de mémoire heap. En effet sur les plateformes 32 bits, un entier nul occupe déjà pas moins de 24 octets. Alors imagine tout le reste...

Tout ceci pour dire que la mémoire heap sera très souvent le facteur limitant lors de tes projets Python sur calculatrices.

Afin de te permettre de choisir ton modèle en toute connaissance de cause, nous t'avions déjà communiqué un classement des différents modèles Python par capacité heap :
  1. 252,1 Mo : HP Prime G2
  2. 15,6 Mo : HP Prime G1
  3. 2,068 Mo : TI-Nspire CX II
  4. 1,033 Mo : Casio Graph 90+E
  5. 101,262 Ko : Casio Graph 35+E II
  6. 33,545 Ko : NumWorks
  7. 18,354 Ko : TI-83 Premium CE Edition Python
  1. 252,1 Mo : HP Prime G2
  2. 15,6 Mo : HP Prime G1
  3. 4,100 Mo : TI-Nspire CX (Ndless + KhiCAS)
  4. 2,068 Mo : TI-Nspire CX II
  5. 1,033 Mo : Casio Graph 90+E
  6. 101,262 Ko : Casio Graph 35+E II
  7. 64,954 Ko : NumWorks (firmware Omega + appli KhiCAS)
  8. 33,545 Ko : NumWorks
  9. 18,354 Ko : TI-83 Premium CE Edition Python
  1. 252,1 Mo : HP Prime G2
  2. 15,6 Mo : HP Prime G1
  3. 2,068 Mo : TI-Nspire CX II
  4. 1,033 Mo : Casio Graph 90+E / fx-CG50
  5. 101,262 Ko : Casio Graph 35+E II / fx-9750/9860GIII
  6. 33,545 Ko : NumWorks
  7. 20,839 Ko : TI-83 Premium CE + TI-Python
  8. 18,354 Ko : TI-83 Premium CE Edition Python / TI-84 Plus CE Python Edition
  1. 252,1 Mo : HP Prime G2
  2. 15,6 Mo : HP Prime G1
  3. 4,100 Mo : TI-Nspire CX / CX II (Ndless + KhiCAS CX / KhiCAS CX II)
  4. 2,068 Mo : TI-Nspire CX II
  5. 2,050 Mo : TI-Nspire (Ndless + MicroPython)
  6. 1,033 Mo : Casio Graph 90+E / fx-CG50
  7. 258,766 Ko : Casio Graph 35/75+E / 35/75/95 / fx-9750/9860GII (SH4 - appli CasioPython)
  8. 101,262 Ko : Casio Graph 35+E II / fx-9750/9860GIII
  9. 64,954 Ko : NumWorks (firmware Omega + appli KhiCAS)
  10. 33,545 Ko : NumWorks
  11. 32,648 Ko : Casio Graph 35+E II / 35/75/85/95(SH3) / fx-9750/9860GIII / fx-9750/9860GII(SH3) / fx-9860G (appli CasioPython)
  12. 23,685 Ko : TI-83 Premium CE + TI-Python (firmware tiers)
  13. 20,839 Ko : TI-83 Premium CE + TI-Python
  14. 18,354 Ko : TI-83 Premium CE Edition Python / TI-84 Plus CE Python Edition

De nouveaux éléments concernant la NumWorks nécessitent aujourd'hui la mise à jour de ce classement : une bonne et une mauvaise nouvelle. Commençons par la mauvaise.

Sur NumWorks N0110, tu as la possibilité d'installer KhiCAS, une application t'offrant un environnement intégré de Mathématiques et de Sciences développé par Bernard Parisse, enseignant-chercheur à l'Université de Grenoble, en parallèle de son logiciel Xcas pour ordinateur. Elle intègre nombre de choses : moteur de calcul formel GIAC, bibliothèques d'unités et de constantes physiques, application tableur, application de tableau périodique des éléments, langages de programmation Python et Xcas, ...

Le firmware officiel ne gérant pas les applications additionnelles, pour l'installer il te fallait commencer par passer ta calculatrice sous un firmware tiers, comme par exemple Omega. Or, l'application KhiCAS distribuée sur la page du firmware tiers Omega est sûrement suffisante pour nombre de choses, mais n'est pas stable.

Si tu es un utilisateur exigeant de KhiCAS, il te faut une version aussi fiable que possible et elle existe ; il te suffit de prendre l'application KhiCAS distribuée pour Delta, un autre firmware tiers.

Mise à part la gestion des applications, Delta apporte beaucoup moins d'améliorations qu'Omega, et malheureusement ces deux éditions de l'application KhiCAS ne sont pas interchangeables. En attendant une éventuelle résolution du problème, nous nous devons donc de tenir compte de Delta au classement.

D'autre part, nous ne l'avions pas remarqué mais Omega a changé la capacité du heap Python à compter de sa version 1.21 un peu plus tôt cette année... ;)

Alors découvrons tout cela sans plus attendre.

Le module Python standard gc permet de connaître la capacité exacte du heap, d'un simple appel gc.mem_alloc() + gc.mem_free(). Toutefois, toutes les calculatrices Python n'intègrent pas ce module.

Afin de pouvoir faire des comparaisons équitables, nous construisons notre propre script d'estimation de la capacité heap. Il utilise les tailles des objets Python suivantes, valides pour les plateformes 32 bits que sont à ce jour nos calculatrices :
  • pour un entier nul : 24 octets déjà...
  • pour un entier court non nul (codable sur 31 bits + 1 bit de signe) : 28 octets
  • pour un entier long :
    • 28 octets
    • + 4 octets pour chaque groupe de 30 bits utilisé par son écriture binaire au-delà des 31 bits précédents
  • pour une chaîne :
    • 49 octets
    • + 1 octet par caractère
  • pour une liste :
    • 64 octets
    • + 8 octets par élément
    • + les tailles de chaque élément
Notre script va tenter de remplir le heap. Il utilise pour cela plusieurs objets qu'il va tenter de faire grandir chacun son tour, jusqu'à déclenchement d'une erreur, et retourner alors le calcul de la capacité ainsi consommée.


Nous récupérerons de plus la plus grand taille d'objet que nous avons réussi à utiliser lors de ce test, on t'explique de suite.

Voici donc le script, issu du QCC 2020 :
Code: Tout sélectionner
def size(o):
  t = type(o)
  s = t == str and 49 + len(o)
  if t == int:
    s = 24
    while o:
      s += 4
      o >>= 30
  elif t == list:
    s = 64 + 8*len(o)
    for so in o:
      s += size(so)
  return s

def mem(v=1):
  try:
    l=[]
    try:
      l.append(0)
      l.append(0)
      l.append("")
      l[2] += "x"
      l.append(0)
      l.append(0)
      while 1:
        try:
          l[2] += l[2][l[1]:]
        except:
          if l[1] < len(l[2]) - 1:
            l[1] = len(l[2]) - 1
          else:
            raise(Exception)
    except:
      if v:
        print("+", size(l))
      try:
        l[0] += size(l)
      except:
        pass
      try:
        l[3], l[4] = mem(v)
      except:
        pass
      return l[0] + l[3], max(l[0], l[4])
  except:
    return 0, 0


Selon l'état de l'interpréteur Python, la capacité retournée par un appel mem() peut légèrement varier. Aussi lancerons-nous le test plusieurs fois et conserverons-nous la valeur maximale, voici une fonction en ce sens :
Code: Tout sélectionner
def testmem():
  m1, m2 = 0, 0
  while 1:
    t1, t2 = mem(0)
    if t1 > m1 or t2 > m2:
      m1 = max(t1, m1)
      m2 = max(t2, m2)
      input(str((m1,m2)))


Sur les NumWorks munies du firmware officiel Epsilon nous trouvons 32,526 Ko, et c'était pareil avec le firmware tiers Omega jusqu'à la version 1.20.3.

Sur la NumWorks N0110 munie du firmware tiers Delta, nous trouvons nettement moins pour le heap de l'application Python officielle, seulement 24,179 Ko.

Est-ce cette économie de mémoire qui permet à KhiCAS de fonctionner correctement ? En tous cas l'interpréteur Python de KhiCAS retourne pour le même test la superbe capacité de 63,898 Ko.

13823Si tu munis maintenant ta NumWorks des dernières version 1.21 du firmware tiers Omega, tu obtiens alors une fantastique capacité heap de désormais 98,928 Ko ! :bj:

Avec la nouvelle capacité heap Python de près de 100 Ko dans Omega 1.21, ta NumWorks a enfin presque terminé de rattraper son retard sur la Casio Graph 35+E II bien moins chère ! :bj:

Précisons que pour être aussi exact que possible, il faut rajouter à ces valeurs de retour la consommation mémoire des définitions du script, soit 1,056 Ko.

D'où le classement maintenant à jour :
  1. 252,1 Mo : HP Prime G2
  2. 15,6 Mo : HP Prime G1
  3. 2,068 Mo : TI-Nspire CX II
  4. 1,033 Mo : Casio Graph 90+E
  5. 101,262 Ko : Casio Graph 35+E II
  6. 33,582 Ko : NumWorks
  7. 18,354 Ko : TI-83 Premium CE Edition Python
  1. 252,1 Mo : HP Prime G2
  2. 15,6 Mo : HP Prime G1
  3. 4,100 Mo : TI-Nspire CX (Ndless + KhiCAS)
  4. 2,068 Mo : TI-Nspire CX II
  5. 1,033 Mo : Casio Graph 90+E
  6. 101,262 Ko : Casio Graph 35+E II
  7. 98,928 Ko : NumWorks (firmware Omega)
  8. 64,954 Ko : NumWorks N0110 (firmware Delta / Omega + appli KhiCAS)
  9. 33,582 Ko : NumWorks
  10. 25,235 Ko : NumWorks N0110 (firmware Delta)
  11. 18,354 Ko : TI-83 Premium CE Edition Python
  1. 252,1 Mo : HP Prime G2
  2. 15,6 Mo : HP Prime G1
  3. 2,068 Mo : TI-Nspire CX II
  4. 1,033 Mo : Casio Graph 90+E / fx-CG50
  5. 101,262 Ko : Casio Graph 35+E II / fx-9750/9860GIII
  6. 33,582 Ko : NumWorks
  7. 20,839 Ko : TI-83 Premium CE + TI-Python
  8. 18,354 Ko : TI-83 Premium CE Edition Python / TI-84 Plus CE Python Edition
  1. 252,1 Mo : HP Prime G2
  2. 15,6 Mo : HP Prime G1
  3. 4,100 Mo : TI-Nspire CX / CX II (Ndless + KhiCAS CX / KhiCAS CX II)
  4. 2,068 Mo : TI-Nspire CX II
  5. 2,050 Mo : TI-Nspire (Ndless + MicroPython)
  6. 1,033 Mo : Casio Graph 90+E / fx-CG50
  7. 258,766 Ko : Casio Graph 35/75+E / 35/75/95 / fx-9750/9860GII (SH4 - appli CasioPython)
  8. 101,262 Ko : Casio Graph 35+E II / fx-9750/9860GIII
  9. 98,928 Ko : NumWorks (firmware Omega)
  10. 64,954 Ko : NumWorks N0110 (firmware Omega + appli KhiCAS)
  11. 33,582 Ko : NumWorks
  12. 32,648 Ko : Casio Graph 35+E II / 35/75/85/95(SH3) / fx-9750/9860GIII / fx-9750/9860GII(SH3) / fx-9860G (appli CasioPython)
  13. 25,235 Ko : NumWorks N0110 (firmware Delta)
  14. 23,685 Ko : TI-83 Premium CE + TI-Python (firmware tiers)
  15. 20,839 Ko : TI-83 Premium CE + TI-Python
  16. 18,354 Ko : TI-83 Premium CE Edition Python / TI-84 Plus CE Python Edition


À quand les 120K histoire que cela change l'ordre du classement ? ;)
 
Ce compte ne reçoit pas de MP / This account does not receive PMs.
Avatar de l’utilisateur
AdminAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 0.5%
 
Messages: 458
Images: 28
Inscription: 30 Aoû 2011, 11:00
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: NumWorks Omega 1.21 : 100K de heap pour scripts Python !

Message non lude parisse » 29 Avr 2021, 21:37

Il faudrait analyser plus precisement ce qui rend instable KhiCAS lorsqu'il est utilise conjointement avec Omega. Peut-etre la taille de la pile? KhiCAS alloue sur la pile le catalogue des commandes et ca consomme beaucoup.

Ceci etant dit, pour les personnes qui souhaitent utiliser KhiCAS pour travailler, je conseille bien sur d'utiliser Delta, car c'est la-dessus que je teste. Quand je dis travailler, je veux bien sur dire faire des maths, mais aussi programmer, avec un MicroPython plus complet que celui d'Epsilon. Ne vous inquietez pas trop lorsque critor ecrit "Delta apporte beaucoup moins d'améliorations qu'Omega", ces ameliorations d'Omega sont (a mon avis forcement un peu subjectif) essentiellement cosmetiques, on travaille tout aussi bien avec Delta+KhiCAS qu'avec Omega+KhiCAS (d'ailleurs certains raccourcis comme les shift-nombre d'Omega sont tres probablement inspires des raccourcis menus rapides de KhiCAS).

A noter que la version Numworks de KhiCAS ne propose pas d'interpreteur Javascript contrairement a la version TI Nspire CX, par manque de memoire RAM disponible: deja partager les environ 100K de memoire entre UI, Xcas et MicroPython c'est vraiment limite, alors il est impossible d'en reserver pour QuickJS, surtout si on veut profiter de la specificite de QuickJS qui est son excellente integration avec les maths (types entiers longs, flottants longs, complexes, polynomiaux, matrices/vecteurs avec surcharge des operateurs) mais qui necessite d'interpreter un script Javascript assez lourd.
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 77.1%
 
Messages: 3497
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: NumWorks Omega 1.21 : 100K de heap pour scripts Python !

Message non lude critor » 29 Avr 2021, 21:40

parisse a écrit:A noter que la version Numworks de KhiCAS ne propose pas d'interpreteur Javascript contrairement a la version TI Nspire CX, par manque de memoire RAM disponible: deja partager les environ 100K de memoire entre UI, Xcas et MicroPython c'est vraiment limite, alors il est impossible d'en reserver pour QuickJS, surtout si on veut profiter de la specificite de QuickJS qui est son excellente integration avec les maths (types entiers longs, flottants longs, complexes, polynomiaux, matrices/vecteurs avec surcharge des operateurs) mais qui necessite d'interpreter un script Javascript assez lourd.

Merci, j'ai corrigé.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 41.4%
 
Messages: 41455
Images: 14353
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: NumWorks Omega 1.21 : 100K de heap pour scripts Python !

Message non lude critor » 29 Avr 2021, 21:51

parisse a écrit:Il faudrait analyser plus precisement ce qui rend instable KhiCAS lorsqu'il est utilise conjointement avec Omega. Peut-etre la taille de la pile? KhiCAS alloue sur la pile le catalogue des commandes et ca consomme beaucoup.


Mais je peux vous donner un exemple de suite :
Code: Tout sélectionner
def seuil(d):
  n=0
  u=2.
  d=d**2
  while (u-1)**2>=d:
    u=1+1/((1-u)*(n+1))
    n=n+1
  return [n,u]


Avec l'appli KhiCAS distribuée pour Omega et en mode MicroPython, l'appel seuil(0.008) ne marche pas.
C'est-à-dire qu'il se termine sans fournir ni de résultat ni d'exception, la calculatrice s'éteint sans avoir rien affiché, ce qui est totalement anormal.

Et ce alors qu'il marche parfaitement avec l'appli KhiCAS distribuée pour Delta, ou encore dans le mode de compatibilité Python.

De mémoire c'est très loin d'être la seule anomalie concernant l'application KhiCAS Omega.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 41.4%
 
Messages: 41455
Images: 14353
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: NumWorks Omega 1.21 : 100K de heap pour scripts Python !

Message non lude critor » 29 Avr 2021, 22:04

Autre exemple problématique avec l'édition de KhiCAS pour Omega :
Code: Tout sélectionner
def nodivisorin(n,l):
  for k in l:
    if n//k*k==n:
      return False
  return True

def isprimep(n):
  l,k=,[3],7
  if n==2 or n==5:return True
  if int(n)!=n or n//2*2==n or n//5*5==5:
    return False
  if n<k:return n in l
  while k*k<n:
    if nodivisorin(k,l):l.append(k)
    k+=2+2*((k+2)//5*5==k+2)
  r=nodivisorin(n,l)
  return r

Pareil, avec l'appel isprimep(10000019) en mode MicroPython, la calculatrice semble s'éteindre pendant le calcul, sans avoir affiché le moindre résultat ni la moindre exception.

Et ce alors que le même code marche parfaitement en mode de compatibilité Python, ou encore sur l'édition de KhiCAS pour Delta.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 41.4%
 
Messages: 41455
Images: 14353
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: NumWorks Omega 1.21 : 100K de heap pour scripts Python !

Message non lude cent20 » 29 Avr 2021, 22:22

critor a écrit:
  • La mémoire de stockage, qui contient physiquement tes scripts prêts à l'emploi.
  • La pile (stack) qui référence, à l'exécution, les objets Python créés. Sa capacité limite donc le nombre d'objets Python pouvant coexister simultanément en mémoire.
  • Le tas (heap) qui stocke, à l'exécution, le contenu des objets Python créés. Il limite donc la taille globale utilisée pour les données de ces différents objets.
Le langage Python est un très gros consommateur de mémoire heap. En effet sur les plateformes 32 bits, un entier nul occupe déjà pas moins de 24 octets. Alors imagine tout le reste...


Je comprends de mieux en mieux ces histoires de mémoire. Je ne sais pas si se sont les explications qui sont de plus en plus claires ou si cela commence enfin à pénétrer mon esprit.

Cela n'a l'air de rien, mais la taille du tas heap est très importante pour développer des projets un peu important, sans être obèses. Entre juillet 2019 et mars 2020, avec le heap de 16 ko c'était juste un enfer, comme en témoigne le topic : Script qui refuse de s’exécuter sur la Numworks N0100

En mars 2020, les choses se sont un peu débloqués et on a enfin vu passer la taille du heap de 16 ko à 32 ko, ce qui m'a permis avec des élèves motivés de pouvoir commencer à développer des petits jeux pour la NumWorks.

Et la taille du heap n'est pas importante que pour les jeux, les scripts un peu costaud, les boîtes à outils en mathématiques par exemple peuvent consommer rapidement de la mémoire.

Lors du lancement du Tetris, nous avions réussi avec Golden Man à consommer la quasi-totalité de la taille du heap, par chance le jeu était fini mais nous avions quelques idées potentiels qui ont été abandonnées faute de mémoire.

Aujourd'hui une nouvelle génération de codeurs arrive, elle est brillante, intuitive, fait des jeux superbes maitrisant parfaitement les codes des jeux arcades et n'hésitant pas à "coder large" pour avoir un beau rendu. Si vous n'avez pas encore découvert les jeux de fime, votre vie n'est pas encore foutu mais il ne faudrait pas trop tarder non plus.

Son espace workshop : https://workshop.numworks.com/python/fime

Il a fait un Doodle Jump qui ne marche pas sur le Workshop mais sur la calculatrice il est juste parfaitement calibré.

Si je préfère le design flat, je dois reconnaitre que sa proposition de snake est juste incroyable.

Son jetpack_bird a d'ailleurs eu l'honneur de passer ici même, et ce n'est pas le meilleur de ces jeux je trouve.

Enfin, pour son pong, il m'a expliqué qu'il consommait trop de mémoire mais qu'il tournait sur Omega. C'est à ce moment là que j'ai compris que Omega avait débloqué la taille du heap, montrant à NumWorks le chemin à prendre.

Je me suis un peu égaré, mais je n'ai pas perdu le fil

critor a écrit:À quand les 120K histoire que cela change l'ordre du classement ?


Sur le Tetris, nous avions demandé à Omega de nous faire un tas de 120 Ko, sans vraiment y croire, juste pour les occuper, les génies ne doivent pas s'ennuyer trop longtemps, il faut toujours les nourrir de projets à mener. Nous ne pensions pas voir la taille du tas se débloquer si vite, mais il est très appréciable de pouvoir exploiter le potentiel de la NumWorks.

Un grand bravo donc aux développeurs de Omega !

On va se contenter de 100 Ko pour l'instant :D , et il faut espérer que le chemin tracé sera suivi par Epsilon, l'OS officiel de la NumWorks, et si la pente est trop raide, on peut se contenter de 64 ko pour commencer (sautons mais alors à titre vraiment exceptionnel, l'étape des 42 ko)

Un grand bravo donc aux développeurs de Omega !
Image
Enseignant de mathématiques et d'informatique. Spécialité NSI : Des projets, des tutos, mais aussi de l'art
Calculatrice NumWorks : Des applications et des jeux, scripts, 📙 Découvrir la NumWorks
Avatar de l’utilisateur
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 45.9%
 
Messages: 1007
Images: 64
Inscription: 17 Mai 2012, 09:49
Localisation: Avignon
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: nsi_xyz

En ligne

Re: NumWorks Omega 1.21 : 100K de heap pour scripts Python !

Message non lude redgl0w » 30 Avr 2021, 05:43

critor a écrit:Toutefois, toutes les calculatrices Python n'intègrent pas ce module.

On peut l'activer si tu trouves ça nécessaire :p

parisse a écrit:Il faudrait analyser plus precisement ce qui rend instable KhiCAS lorsqu'il est utilise conjointement avec Omega. Peut-etre la taille de la pile? KhiCAS alloue sur la pile le catalogue des commandes et ca consomme beaucoup.

Sur omega, on a drastiquement réduit le heap natif en effet (pour augmenter celui pour python), mais comme le firmware lui même n'utilise pratiquement pas d'allocations dynamiques ça ne devrait pas déranger (même si on a eu des crash lié à de vieux problèmes). Cependant, les allocations dynamiques d'external ce font sur un buffer qu'on passe en paramètre lors de l'execution d'une app externe (cf. les sources d'external) qui est un buffer non alloué dynamiquement dans omega (il est dans l'application external). Le seul changement qu'on ai fait est d'augmenter sa taille jusqu'à aussi 100000o.

cent20 a écrit:En mars 2020, les choses se sont un peu débloqués et on a enfin vu passer la taille du heap de 16 ko à 32 ko, ce qui m'a permis avec des élèves motivés de pouvoir commencer à développer des petits jeux pour la NumWorks.

Ce changement est du à l'arrivée du module pyplot d'ailleurs (c'était pas pour toi :troll: )

cent20 a écrit:On va se contenter de 100 Ko pour l'instant :D

Soon (tm)
Image
Avatar de l’utilisateur
redgl0wVIP+
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Prochain niv.: 56.8%
 
Messages: 283
Images: 0
Inscription: 30 Oct 2019, 20:36
Localisation: Centre Val de Loire
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: MP2I
Twitter/X: Gl0wRed
GitHub: RedGl0w

Re: NumWorks Omega 1.21 : 100K de heap pour scripts Python !

Message non lude parisse » 30 Avr 2021, 06:36

redgl0w a écrit:
parisse a écrit:Il faudrait analyser plus precisement ce qui rend instable KhiCAS lorsqu'il est utilise conjointement avec Omega. Peut-etre la taille de la pile? KhiCAS alloue sur la pile le catalogue des commandes et ca consomme beaucoup.

Sur omega, on a drastiquement réduit le heap natif en effet (pour augmenter celui pour python), mais comme le firmware lui même n'utilise pratiquement pas d'allocations dynamiques ça ne devrait pas déranger (même si on a eu des crash lié à de vieux problèmes). Cependant, les allocations dynamiques d'external ce font sur un buffer qu'on passe en paramètre lors de l'execution d'une app externe (cf. les sources d'external) qui est un buffer non alloué dynamiquement dans omega (il est dans l'application external). Le seul changement qu'on ai fait est d'augmenter sa taille jusqu'à aussi 100000o.

Ce n'est pas moi qui ai travaille sur l'allocation memoire dans Delta, c'est zardam, de mon cote je me contente d'utiliser malloc, donc je ne vais pas pouvoir dire grand chose de precis .
Je peux quand meme dire que d'apres les symptomes decrits par critor, le probleme semble venir du malloc appele pour initialiser le tas MicroPython. Il semble probable qu'une partie de la memoire donnee par malloc soit utilisee par autre chose quand KhiCAS tourne depuis Omega, ca pourrait etre la pile par exemple ou bien de la memoire utilisee par une des routines systemes qui sont appelees par MicroPython (gestion ecran/clavier?).
Quelques suggestions de tests pour isoler mieux le probleme: reduire la taille du tas micropython dans les parametres de KhiCAS et voir si les programmes de critor tournent ou pas. Tester aussi quelques calculs qui prennent un peu de memoire (par exemple calcul d'inverses de matrices nxn du genre n:=10; a:=ranm(n,n); inv(a); et augmenter la valeur de n ou/et le nombre de matrices) pour voir si le probleme n'apparait qu'avec MicroPython ou aussi avec Xcas.
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 77.1%
 
Messages: 3497
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

En ligne

Re: NumWorks Omega 1.21 : 100K de heap pour scripts Python !

Message non lude redgl0w » 30 Avr 2021, 06:45

parisse a écrit:Ce n'est pas moi qui ai travaille sur l'allocation memoire dans Delta, c'est zardam, de mon cote je me contente d'utiliser malloc, donc je ne vais pas pouvoir dire grand chose de precis .

De toute manière comme je l'ai écrit au dessus, normalement les appels de malloc sont alloués dans un buffer qui n'a rien à voir avec la baisse du heap du firmware.
parisse a écrit:Je peux quand meme dire que d'apres les symptomes decrits par critor, le probleme semble venir du malloc appele pour initialiser le tas MicroPython. Il semble probable qu'une partie de la memoire donnee par malloc soit utilisee par autre chose quand KhiCAS tourne depuis Omega, ca pourrait etre la pile par exemple ou bien de la memoire utilisee par une des routines systemes qui sont appelees par MicroPython (gestion ecran/clavier?).

Normallement la mémoire est dans le buffer static des apps. Une des sources possibles serait le lancement depuis l'application home que M4x1m3 a écrit (que personne n'a review :/ ).
parisse a écrit:Quelques suggestions de tests pour isoler mieux le probleme: reduire la taille du tas micropython dans les parametres de KhiCAS et voir si les programmes de critor tournent ou pas. Tester aussi quelques calculs qui prennent un peu de memoire (par exemple calcul d'inverses de matrices nxn du genre n:=10; a:=ranm(n,n); inv(a); et augmenter la valeur de n ou/et le nombre de matrices) pour voir si le probleme n'apparait qu'avec MicroPython ou aussi avec Xcas.

Le plus simple pour trouver la source du problème serait d'avoir de quoi debug sur n0110 (j'ai un stlink v2, mais pas de quoi le connecter, car les seuls vendeurs de connectiques qui proposent ce que je cherche se font une très bonne marge).
Image
Avatar de l’utilisateur
redgl0wVIP+
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Prochain niv.: 56.8%
 
Messages: 283
Images: 0
Inscription: 30 Oct 2019, 20:36
Localisation: Centre Val de Loire
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: MP2I
Twitter/X: Gl0wRed
GitHub: RedGl0w

Re: NumWorks Omega 1.21 : 100K de heap pour scripts Python !

Message non lude Fime » 30 Avr 2021, 07:51

Salut
J'étais le premier enthousiasmé par cette mise à niveau, j'avais déjà du stopper le dev d'un tetris en POO alors que celui-ci n'avais un taille "que" de 9ko.

Apres cette MAJ j'ai donc repris le développement très vite et j'ai pondu un script d'environ 16ko (et le jeu étais pas fini !). Enfin, bref, ma calculatrice s'est reset quand j'ai voulu entrer dans l'application suites (et j'avais pas fait de backup le soir précédent, j'vous jure j'étais sur le cul \o/ ).

Donc ma remarque/question est la suivante : je ne m'y connais pas très bien en architecture système, mais n'y a-t-il pas un risque de "collision" de mémoire entre applications qui causerais des bugs?
Est-ce que ce potentiel problème a été pris en compte ?

D'autant plus que numworks, eux (qui on conçu le système) limitent leur tas à seulement un tier de celui de Omega (comme on l'a dit, environ 33ko). Serais-ce par mesure de sécurité ?
Avatar de l’utilisateur
Fime
Niveau 5: MO (Membre Overclocké)
Niveau 5: MO (Membre Overclocké)
Prochain niv.: 0%
 
Messages: 12
Inscription: 05 Nov 2020, 19:35
Localisation: Lyon - France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: INSA Lyon promo 67
GitHub: fime-space

Suivante

Retourner vers News NumWorks

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 12 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
839 utilisateurs:
>817 invités
>17 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)