Animation Radar Python optimisée TI-83 Premium CE 5.5
Posted: 12 May 2020, 16:10
Dans un article précédent, nous te présentions notre bibliothèque de compatibilité automatique PolyPyNet pour les scripts Python graphiques sur calculatrices.
Au menu, compatibilité totale entre les scripts utilisant les bibliothèques graphiques propriétaires des différents constructeurs, même si utilisés chez la concurrence : :bj
Au menu, compatibilité totale entre les scripts utilisant les bibliothèques graphiques propriétaires des différents constructeurs, même si utilisés chez la concurrence : :bj
- kandinsky pour NumWorks
- casioplot pour Casio Graph 90/35+E II
- ti_graphics pour TI-83 Premium CE Edition Python
En pratique, les performances des scripts faisant appel à PolyPyNet étaient globalement très satisfaisantes :
Le problème venait de l'architecture matérielle même de la TI-83 Premium CE Edition Python, déjà réexplicitée récemment. Les scripts Python n'y sont pas exécutés par le processeur eZ80 principal, mais par un coprocesseur 32 bits Cortex-M0+/ARMv6.
C'est-à-dire que les scripts Python n'ont pas d'accès direct au matériel de la machine et notamment à l'écran. Toute commande graphique génère un événement de rafraichissement qui doit ici transiter via la processeur eZ80 plus lent avant d'atteindre l'écran, d'où une latence très supérieure.
Les scripts conçus pour les bibliothèques graphiques minimalistes de la concurrence, faute de mieux appellent en boucle plein de commandes d'allumage de pixels "set_pixel", ce qui est effectivement une catastrophe si exécuté à l'identique sur TI-83 Premium CE Edition Python.
- pas de ralentissement si exécuté sur la plateforme associée à la bibliothèque graphique utilisée
- performances restant honorables si exécuté sur la plupart des plateformes concurrentes... à une exception près
Le problème venait de l'architecture matérielle même de la TI-83 Premium CE Edition Python, déjà réexplicitée récemment. Les scripts Python n'y sont pas exécutés par le processeur eZ80 principal, mais par un coprocesseur 32 bits Cortex-M0+/ARMv6.
C'est-à-dire que les scripts Python n'ont pas d'accès direct au matériel de la machine et notamment à l'écran. Toute commande graphique génère un événement de rafraichissement qui doit ici transiter via la processeur eZ80 plus lent avant d'atteindre l'écran, d'où une latence très supérieure.
Les scripts conçus pour les bibliothèques graphiques minimalistes de la concurrence, faute de mieux appellent en boucle plein de commandes d'allumage de pixels "set_pixel", ce qui est effectivement une catastrophe si exécuté à l'identique sur TI-83 Premium CE Edition Python.
Mais Texas Instruments avait prévu le problème. Sa bibliothèque ti_graphics est tout sauf minimaliste. Elle comprend plein de fonctions dédiées pour tracer des primitives et formes géométriques en ne géréant qu'un seul événément de rafraichissement :
Il suffit de remplacer les boucles de set_pixel() par les appels graphiques correspondants si existants dans ti_graphics.
Nous l'avons donc fait pour le radar, avec cette fois-ci un cadre d'affichage correspondant bien à la zone graphique de 320×210 pixels de la TI-83 Premium CE Edition Python.
Et bien la différence est impressionnante, plus que 18.535s pour une révolution, soit une accélération d'un facteur de 133 !
- lignes
- lignes brisées
- polygones avec remplissage optionnel
- rectangles avec remplissage optionnel
- arcs de cercles ou cercles avec remplissage optionnel
- arcs d'ellipses ou ellipses vec remplissage optionnel
Il suffit de remplacer les boucles de set_pixel() par les appels graphiques correspondants si existants dans ti_graphics.
Nous l'avons donc fait pour le radar, avec cette fois-ci un cadre d'affichage correspondant bien à la zone graphique de 320×210 pixels de la TI-83 Premium CE Edition Python.
Et bien la différence est impressionnante, plus que 18.535s pour une révolution, soit une accélération d'un facteur de 133 !
- 3.2754s: NumWorks N0110 (firmware tiers Omega)
- 3.4296s : NumWorks N0100
- 3.5284s : NumWorks N0110
- 3.6286s : NumWorks N0100 (firmware tiers Omega)
- 6.499s : Graph 90+E
- 7.412s : TI-Nspire CX CR3-
- 9.703s : TI-Nspire CX CR4+
- 18.535s : TI-83 Premium CE Edition Python (script dédié optimisé à la main)
- 41min08.685s : TI-83 Premium CE Edition Python (compatibilité automatique PolyPyNet)
Téléchargements :