π
<-
Chat plein-écran
[^]

Mémoire tas/heap + tailles modules TI-83 Premium CE 5.5

:32ti73: :32ti73e: :32ti73e2: :32ti76f: :32ti80: :32ti81: :32ti82: :32ti85: :32ti86: :32ti82s: :32ti82sf: :32ti82sfn: :32ti83: :32ti83p: :32ti83pb: :32ti83pr: :32ti83pfr: :32ti83pse: :32ti84p: :32ti84pse: :32ti84ppse: :32ti84pfr: :32ti84pcse: :32ti83pfrusb: :32ti82p: :32ti82a: :32ti84pce: :32ti83pce:

Mémoire tas/heap + tailles modules TI-83 Premium CE 5.5

Unread postby critor » 03 May 2020, 16:26

12382Dans sa prochaine mise à jour
5.5
gratuite prévue pour
Mai 2020
,
Texas Instruments
va rajouter de formidables possibilités à ta
TI-83 Premium CE
:
  • mise à jour en
    5.5
    de l'application
    SciTools
  • mise à jour en
    5.5
    de l'application
    Periodic
  • mise à jour en
    5.5
    de l'application
    Python
    (
    TI-83 Premium CE Édition Python
    uniquement)

Cette dernière application apporte de nouveaux modules importables pour tes scripts
Python
:
  • time
    , certes déjà présent mais maintenant listé au menu et donc officiel; il ne risque plus de disparaitre :)
  • , avec diverses possibilités :
    • détection des simples pressions de touches clavier
      (sans validation donc)
      par l'utilisateur, avec même l'éventuel modificateur actif
      (
      2nde
      ou
      alpha
      )
      , et ça marche aussi avec un clavier
      USB
      ! :bj:
    • affichage dans la console à la ligne que tu veux :bj:
    • exportation de listes de nombres
      (entiers, flottants ou complexes)
      existant dans le contexte
      Python
      vers l'environnement de la calculatrice, pour traitement à l'aide d'autres applications :bj:
    • importation depuis le contexte
      Python
      de listes ou équation de régression existant dans l'environnement de la calculatrice :bj:
    • et donc plus généralement un début d'intégration du
      Python
      à l'environnement mathématique de la calculatrice, enfin l'application
      Python
      va pouvoir servir non plus seulement à coder un truc déconnecté dans un coin, mais à traiter des problèmes et tâches complexes dans leur globalité ! :bj:
  • , une bibliothèque graphique pour tracer dans un repère, conformément aux programmes de
    Physique-Chimie
    ,
    SNT
    et
    NSI
    , tout en permettant également nombre d'applications en
    Mathématiques
    ! :bj:
  • ti_hub
    , pour les projets d'objects connectés à l'aide de l'interface :)
  • ti_rover
    , pour les projets de robotique à l'aide du :)
  • ainsi qu'un mystérieux
    ti_graphics
    pour sa part non listé au menu, mais justement utilisé par

Avant de poursuivre notre exploration des modules, voyons un petit peu où nous en sommes aujourd'hui niveau mémoire.
Attention, nous ne disposons que d'une préversion. Il est donc parfaitement possible que plusieurs points abordés dans notre critique soient améliorés d'ici la sortie.

Les interpréteurs
MicroPython
ou similaires qui tournent sur ta calculatrice font appel à 3 types de mémoires avec les rôles suivants :
  • la mémoire de stockage qui accueille et conserve tes scripts
    Python
  • le
    stack (pile)
    qui, à l'exécution, accueille les références vers les objets
    Python
    créés
  • le
    heap (tas)
    qui, à l'exécution, accueille les valeurs de ces objets
    Python
En gros le
stack / pile
limite donc le nombre d'objets différents pouvant exister simultanément en mémoire, alors que le
heap / tas
limite la taille globale occupée par ces objets.
A moins d'avoir de gros besoins en terme de récursivité, le facteur limitant pour tes projets
Python
sur calculatrice est habituellement le
heap / tas
.




Sommaire :




1) mémoire de tas / heap et module gc

Go to top

L'appel
mem()
avec le script
mem.py
suivant permet d'estimer la capacité du tas
(heap)
Python
, et retournait jusqu'à présent près de 20K sur
TI-83 Premium CE Édition Python
:
Code: Select all
def sizeenv():
  s=0
  import __main__
  for o in dir(__main__):
    try:s+=size(eval(o))
    except:pass
  return s
def size(o):
  s,t=0,type(o)
  if t==str:s=49+len(o)
  if str(t)=="<class 'function'>":s=136
  if t==int:
    s=24
    while o:
      s+=4
      o>>=30
  if t==list:
    s+=64
    for so in o:s+=8+size(so)
  return s
def mem(v=1,r=1):
  try:
    l=[]
    try:
      l+=[r and 793+sizeenv()]
      if v*r:print(" ",l[0])
      l+=[0]
      l+=[""]
      l[2]+="x"
      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[0]+=mem(v,0)
      except:pass
      return l[0]
  except:return 0

Les formidables nouveautés de la version
5.5
semblent hélas avoir un coût important, à vide nous trouvons désormais à peine
17,5K
de libres avec la version
5.5
, un effondrement non négligeable de plus de 2,5K. :'(

La
TI-83 Premium CE Édition Python
fait partie des très rares calculatrices disposant du module
gc
, module qui va nous être bien pratique pour comprendre ce qui se passe. Retenons les appels suivants :
  • gc.mem_alloc() retourne l'espace occupé sur le tas
    (heap)
  • gc.mem_free() retourne l'espace libre sur le tas
    (heap)

Testons à vide à l'aide du petit script suivant :
Code: Select all
from gc import *
a, f = mem_alloc(), mem_free()
(a, f, a+f)

Nous découvrons donc que le tas
Python
de la
TI-83 Premium CE Édition Python
fait exactement
19,968K
; sa capacité totale n'a donc pas été réduite.

Mais, lorsque tu lances tes scripts
Python
plusieurs choses sont initialisées et consomment du tas avant même l'exécution de ta première ligne de code. Et c'est là qu'il y a une lourde différence :
  • avec la dernière version
    5.4
    : juste
    608o
    consommés pour pas moins de
    19,36Ko
    de libres
  • avec la prochaine version
    5.5
    : pas moins de
    2912o
    consommés pour juste
    17,056Ko
    de libres
Effectivement, on retrouve bien cette consommation supplémentaire de 2,5K sur le tas avant même que tu aies tapé la moindre ligne de
Python
.

En passant il est normal que l'on trouve ici à chaque fois un petit peu moins que l'espace libre trouvé avec
mem()
, puisqu'il y a ici l'importation obligatoire du module
gc
qui consomme également du tas.

D'où le classement en terme de capacité tas
(heap)
disponible pour tes scripts, avec la capacité totale précisée lorsque le module
gc
est disponible :
  1. 1,032942 Mo
    :
    Casio Graph 90+E
  2. 1,022145 / 1,024512 Mo
    :
    HP Prime G1
  3. 100,560 Ko
    :
    Casio Graph 35+E II
  4. 32,339 Ko
    :
    NumWorks
  5. 31,624 Ko
    :
    NumWorks
  6. 19,500 / 19,968 Ko
    :
    TI-83 Premium CE Édition Python
    (ancienne version)
  7. 17,359 / 19,968 Ko
    :
    TI-83 Premium CE Édition Python
    (nouvelle version)
  1. 2,049276 Mo
    :
    TI-Nspire
    (application MicroPython)
  2. 1,032942 Mo
    :
    Casio Graph 90+E / fx-CG50
  3. 1,022145 Mo
    :
    HP Prime G1
  4. 257,636 / 258,048 Ko
    :
    Casio Graph 35+E / 75+ / 35+ USB Power Graphic 2 / 75/95 USB Power Graphic 2 / fx-9750/9860GII USB Power Graphic 2
  5. 100,560 Ko
    :
    Casio Graph 35+E II / fx-9750/9860GIII
  6. 32,339 Ko
    :
    NumWorks
  7. 31,624 Ko
    :
    NumWorks
  8. 31,520 / 32,256 Ko
    :
    Casio Graph 35+E II / 85 / 35+ USB Power Graphic 1 / 75/95 USB Power Graphic 1 / fx-9750/9860GIII / fx-9750/9860GII USB Power Graphic 1 / fx-9860G
  9. 22,605 / 22,912 Ko
    :
    TI-83 Premium CE + TI-Python
  10. 19,500 / 19,968 Ko
    :
    TI-83 Premium CE + TI-Python
    +
    TI-83 Premium CE Édition Python
    (ancienne version)
  11. 17,359 / 19,968 Ko
    :
    TI-83 Premium CE Édition Python
    (nouvelle version)

La
TI-83 Premium CE Édition Python
était déjà la pire solution
Python
pour la capacité tas, et cela ne fait donc qu'empirer.

C'est probablement largement suffisant pour les petits
algo-musements
de quelques lignes qui seront traités en Mathématiques ou Physique-Chimie.

Le problème est ailleurs, ceux qui auront suffisamment accroché pour avoir envie d'aller plus loin risquent d'être rapidement déçus par leur calculatrice...
Ceux qui aborderont des projets
(
SNT
,
NSI
, ... ou même non scolaires)
risquent d'obtenir des erreurs de mémoire assez rapidement après le début du projet...

Car le
Python
ce n'est pas du
C
, les objets
Python
les plus élémentaires sont extrêmement gourmands en mémoire :
  • 64 octets rien que pour une liste vide
  • plus 8 octets pour chaque élément de liste supplémentaire, sans compter la taille de l'élément en question
  • 24 octets pour un entier nul
  • 28 octets pour un entier court non nul
  • 49 octets rien que pour une chaîne vide
  • plus 1 octet par caractère de chaîne supplémentaire
  • ...
Alors imagine la catastrophe quand pour des projets tu multiplies le nombre de ces objets au sein de listes... :#roll#:

Quand on pense à tout ce que nous avons pu souffrir sur
NumWorks
depuis la rentrée 2017 avec seulement 16K de tas disponible avant la mise à jour
13.2
faisant passer cela à 32K, nous sommes en effet assez pessimistes ici devant nos même pas
17.5K
de tas.

Il est possible que l'on ne puisse pas importer simultanément l'ensemble des modules.
Il risque de ne pas rester beaucoup de tas disponible pour coder une fois certains gros modules importés, et nous allons revenir là-dessus.
Cela remet au passage en question notre projet déjà évoqué de développer certains scripts de compatibilité, scripts qui ne feraient alors que réduire encore davantage le peu de mémoire tas utilisable pour tes scripts si tu dois les importer en plus des modules en question. :'(

Les erreurs de mémoire risquent donc d'arriver très rapidement. A cause de ce gros défaut, les scripts
Python
offerts en ligne risquent à notre avis d'être à terme plus nombreux et surtout beaucoup plus conséquents pour les solutions concurrentes que pour la
TI-83 Premium CE Édition Python
, et ce malgré toutes ses formidables possibilités. :'(

Le pire était que cela fait plus de 2 ans que nous communiquons régulièrement
(sans aucune malveillance)
sur ce grave défaut aujourd'hui corrigé de la
NumWorks
, et comprenons donc assez mal que la même erreur ait pu être reproduite ici.
A moins que ce ne soit en fait exprès pour pousser ceux qui veulent aller plus loin à un investissement dans les modèles haut de gamme
TI-Nspire CX II
?...




2) types de scripts et scripts préremplis

Go to top

Grande nouveauté de l'application
Python 5.5
, le menu de création de scripts te permet d'en choisir un type avec la touche
F3
.

Outre le type
Script vierge
par défaut, tu obtiens alors un script prérempli à compléter :
  • Calculs Mathématiques
    : importe
    math
  • Simulation Aléatoire
    : importe
    random
  • Tracer (x,y) et Texte
    : importe
    ti_plotlib
    + script de tracé de nuage de points avec les listes
    x
    et
    y
    à remplir
  • Partage de Données
    : importe
    ti_system
  • Projets STEM Hub
    : importe
    ti_system
    et
    time
  • Rover
    : importe
    time
    ,
    ti_system
    et
    ti_rover


Une belle initiative, voilà de quoi bien alléger tes saisies clavier lorsque tu commences un nouveau script ! :bj:




3) importations modules et consommation tas / heap

Go to top

Voyons enfin un petit peu ce que consomme l'importation de chaque module disponible sur le tas
(heap)
.

Il suffit d'appeler les fonctions du module
gc
vues plus haut, juste avant et après l'importation d'un module.

Voici un script en ce sens, volontairement minimaliste sans définition de fonction afin de minimiser les chances de déclencher en cours d'exécution un nettoyage mémoire qui fausserait les résultats :
Code: Select all
from gc import mem_free as mf

smod = input('Module : ')
mf1, mf2 = 0, 0
scmd = 'from ' + s + ' import *'
mf1 = mf()
exec(scmd)
mf2 = mf()
print(mf1 - mf2)

Voici donc les consommations de tas à l'importation des différents modules intégrés :
  • array
    : 96 o
  • builtins
    : 816 o
  • collections
    : 96 o
  • gc
    : 128 o
  • math
    : 336 o
  • random
    : 176 o
  • sys
    : 224 o
  • ti_graphics
    : 2,896 Ko
  • ti_hub
    : 224 o
  • ti_plotlib
    : 7,232 Ko
  • ti_rover
    : 4,848 Ko
  • ti_system
    : 176 o
  • time
    : 112 o

Nos craintes évoquées plus haut étaient donc apparemment bien fondées; plusieurs modules sont très gros avec plusieurs kilooctets consommés sur le tas:
ti_graphics
,
ti_rover
et
ti_plotlib
notamment, avec quasiment la moitié du tas initialement disponible pour ce dernier.

Quand tu vas donc coder tes scripts et surtout projets
Python
sur
TI-83 Premium CE Édition Python
, contrairement à ce que tu fais peut-être sur d'autres plateformes n'importe que le strict nécessaire.

Aussi si ton projet nécessite des affichages graphiques
(interfaces de menus, jeux, ...)
, évite à tous prix le module
ti_plotlib
sauf si tu as vraiment besoin de tracer des diagrammes
(nuages de points, histogrammes...)
. Préfère-lui plutôt le module
ti_graphics
beaucoup plus économe.
Plutôt que d'utiliser les coordonnées dans un repère orthogonal,
ti_graphics
te fera travailler en terme de pixels ce qui sera beaucoup plus précis; et nous allons t'en présenter les formidables possibilités très prochainement.
Alors justement, à très bientôt ;)




Conclusion

Go to top

Nous t'avions dit en introduction que les éventuels points négatifs pourraient très bien être améliorés d'ici la sortie, vu que nous ne disposons que d'une préversion.

Toutefois, dans le cas particulier du tas
(heap)
Python
traité aujourd'hui nous sommes assez pessimistes.

Rappelons en effet un petit peu l'architecture matérielle assez particulière de la
TI-83 Premium CE Édition Python
:
  • un cœur secondaire 32 bits
    Atmel SAMD21E18A-U
    dédié à l'exécution des scripts
    Python
  • un cœur principal
    eZ80
    qui est le seul à avoir accès à l'ensemble des autres composantes
    (
    Flash
    , contrôleur écran, cœur secondaire...)
Le cœur secondaire contient notamment :
  • un processeur 32 bits
    ARM Cortex-M0+
    cadencé à
    48 MHz
    et agissant donc ici en tant que coprocesseur pour l'exécution de tes scripts
    Python
  • une mémoire
    Flash
    de
    256 Kio
  • une mémoire
    SRAM
    de
    32 Kio
Commences-tu à comprendre le problème ? Le coprocesseur
Python
n'a accès qu'à
32Kio
de
RAM
,
RAM
qui sert pour différentes choses :
  • certes le tas
    (heap)
    Python
    de près de 20K mais pas que
  • également la pile
    (stack)
    Python
  • et aussi il ne faut pas l'oublier l'exécution du
    firmware
    CircuitPython
    modifié inclus dans la mémoire
    Flash
    et qui fournit l'interpréteur
    Python
Près de 17.5K d'espace disponible sur un tas de près de 20K lui-même pris sur une
RAM
de
32Kio
qui sert à bien d'autres choses; la marge d'amélioration nous semble a priori extrêmement limitée.

NumWorks
a mis deux ans et demi à le comprendre; si tant est que
Texas Instruments
comprenne également en quoi 17.5K de tas sont un inconvénient majeur même dans un contexte scolaire, nous craignons que les améliorations ne puissent concerner qu'une future révision matérielle ou même un futur modèle, sans doute encore lointain pour le milieu de gamme vu que la
TI-83 Premium CE Édition Python
a tout juste 1 an. :'(
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 8.5%
 
Posts: 35929
Images: 9788
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
Class: Lycée
YouTube: critor3000
Twitter: critor2000
Facebook: critor.ti
GitHub: critor

Re: Mémoire tas/heap + tailles modules TI-83 Premium CE 5.5

Unread postby cent20 » 03 May 2020, 17:39

Ecrire un article sur une mise à jour de la TI-83 PCE et réussir à caser
29 fois
le mot "tas" dans l'article, je pense que tu es en détresse là Critor ! On va te prêter un respirateur, il y en a 8500 qui ne servent à rien :D

Tout miser sur une marque, "TI" et se retrouver avec une calculatrice sur laquelle la mémoire fond comme un tas de feuilles au soleil, c'est ballot comme on dit chez moi.

Les formidables nouveautés de la version 5.5 semblent hélas avoir un coût important, à vide nous trouvons désormais à peine 17,5K de libres avec la version 5.5, un effondrement non négligeable de plus de 2,5K


:D + :troll: = :#fou#:

Quand on pense à tout ce que nous avons pu souffrir sur NumWorks depuis la rentrée 2017 avec seulement 16K de tas disponible avant la mise à jour 13.2 faisant passer cela à 32K, nous sommes en effet assez pessimistes ici devant nos même pas 17.5K de tas.


Je confirme, 16 ko = 666 problèmes en perspective ! >:]

les scripts Python offerts en ligne risquent à notre avis d'être à terme beaucoup plus nombreux et conséquents pour les solutions concurrentes que pour la TI-83 Premium CE Édition


En effet, la stratégie de TI est suicidaire.

Casio a déjà pris une telle avance concernant la taille du tas python que je ne vois pas comment TI et NumWorks vont pouvoir s'adapter ou réagir, ou alors ils ne croient pas que le Python percera vraiment au point de nécessiter des tas correctement dimensionnés.

Un note d'espoir toutefois pour conclure :

Tu es parti de 20 ko, là tu te retrouves avec 17,5 ko et d'après ma régression linéaire, dans quelques mises à jour, tu auras un tas de 16 ko :troll: (voir moins, ça dépend du sens du vent !)
Last edited by cent20 on 03 May 2020, 17:48, edited 1 time in total.
Image
Enseignant de mathématiques et de spécialité NSI ( projets, tutos ...)
:favorite: NumWork, Python : démineur, snake, tétris
User avatar
cent20Premium
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 3%
 
Posts: 475
Images: 37
Joined: 17 May 2012, 09:49
Location: Avignon
Gender: Male
Calculator(s):
Twitter: nsi_xyz

Re: Mémoire tas/heap + tailles modules TI-83 Premium CE 5.5

Unread postby critor » 03 May 2020, 17:45

cent20 wrote:Ecrire un article sur une mise à jour de la TI-83 PCE et réussir à caser
29 fois
le mot "tas" dans l'article, je pense que tu es en détresse là Critor !

Ben c'est habituellement moi qui m'arrache les cheveux pour que les scripts
Python
des concours de rentrée tournent sur tous les modèles, histoire que tous les scolaires soient à égalité d'entrée peu importe leur équipement.
Je pensais beaucoup à
NumWorks
à chaque fois, tu sais...


Moi qui pensais que l'on allait enfin pouvoir proposer un défi
Python
utilisant un affichage
'graphique'
... :#roll#: ben c'est pas gagné d'avance.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 8.5%
 
Posts: 35929
Images: 9788
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
Class: Lycée
YouTube: critor3000
Twitter: critor2000
Facebook: critor.ti
GitHub: critor

Re: Mémoire tas/heap + tailles modules TI-83 Premium CE 5.5

Unread postby CaptainLuigi » 03 May 2020, 19:38

Je vous avoue que peut-être je me trompes , mais après avoir fait from import * pour tous les modules existants sur ma ti 83 pce ep 5.4 , j'obtiens après un appel à mem() aux environs de 30 ko ;) .... ( peut-être juste un bug)
User avatar
CaptainLuigiPremium
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Level up: 73.4%
 
Posts: 32
Joined: 04 Dec 2019, 12:36
Gender: Male
Calculator(s):
Class: Première générale
YouTube: Tutodev
GitHub: PaulThorel

Re: Mémoire tas/heap + tailles modules TI-83 Premium CE 5.5

Unread postby critor » 03 May 2020, 19:45

mem()
est de toutes façons prévu pour être appelé à vide.
Si la mémoire est chargée, des
garbage collect
peuvent se déclencher et fausser les résultats.

Sinon pourquoi ne pas utiliser mem_free() plutôt, vu qu'on a la chance d'avoir le module
gc
ici ?
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 8.5%
 
Posts: 35929
Images: 9788
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
Class: Lycée
YouTube: critor3000
Twitter: critor2000
Facebook: critor.ti
GitHub: critor


Return to News TI-z80 (TI-73, 76, 80, 81, 82, 83, 84, 85, 86)

Who is online

Users browsing this forum: No registered users and 16 guests

-
Search
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Découvre les nouvelles fonctionnalités en Python de l'OS 5.2 pour les Nspire CX II
Découvre les nouvelles fonctionnalités en Python de l'OS 5.5 pour la 83PCE/84+C-T Python Edition
Omega, le fork étendant les capacités de ta NumWorks, même en mode examen !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...

Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
723 utilisateurs:
>712 invités
>5 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)

-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)