π
<-

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

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

Unread postby redgl0w » 30 Apr 2021, 09:21

critor wrote:Pour l'anomalie n°1, je ne sais pas. Je ne dispose que d'une seule NumWorks N0110, donc c'est assez lourd pour moi d'avoir à chaque fois non seulement à changer de firmware, mais en plus à réinstaller l'application KhiCAS vu que ses éditions Omega et Delta ne sont pas interchangeables.

C'est pas moi qui est Ce n'est pas moi qui ai géré ça (et vu la galère que maxime a eu pour faire tourner l'app, je ne veux pas y toucher :troll: ). Il faudrait vraiment chercher à un moment pourquoi elles ne sont pas compatibles (car à part le heap pour external, il ne devrait pas y avoir tant de différences).
Image
User avatar
redgl0wVIP+
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 62.7%
 
Posts: 285
Images: 0
Joined: 30 Oct 2019, 20:36
Location: Grenoble
Gender: Male
Calculator(s):
MyCalcs profile
Class: ENSIMAG 1A
Twitter: Gl0wRed
GitHub: RedGl0w

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

Unread postby critor » 30 Apr 2021, 09:32

redgl0w wrote:Il faudrait vraiment chercher à un moment pourquoi elles ne sont pas compatibles (car à part le heap pour external, il ne devrait pas y avoir tant de différences).


Me concernant, ça vous avait déjà été signalé. De mémoire, pour l'été 2020.

Voici ce que donne l'édition Delta de KhiCAS si installée sur Omega, une erreur d'API :
13824

Donc si je ne peux pas faire de mélange, difficile de savoir si la série d'anomalies est due au firmware Omega, ou bien à sa déclinaison de KhiCAS.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 48%
 
Posts: 41981
Images: 15887
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

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

Unread postby redgl0w » 30 Apr 2021, 09:46

critor wrote:Voici ce que donne l'édition Delta de KhiCAS si installée sur Omega, une erreur d'API :
13824

Donc si je ne peux pas faire de mélange, difficile de savoir si la série d'anomalies est due au firmware Omega, ou bien à sa déclinaison de KhiCAS.

Cette erreur est retourné lorsque l'application externe retourne la valeur 1, qui correspond normallement à une version de l'API différente entre le firmware et l'app. Sur omega, nous sommes à external V2, et je voulais regarder si la version est la même sur khicas, et sur l'installateur qui me semble être celui de delta + KhiCas, la dernière version du firmware date du dernier commit sur cette branche, qui est aussi sous version 2.
Image
User avatar
redgl0wVIP+
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 62.7%
 
Posts: 285
Images: 0
Joined: 30 Oct 2019, 20:36
Location: Grenoble
Gender: Male
Calculator(s):
MyCalcs profile
Class: ENSIMAG 1A
Twitter: Gl0wRed
GitHub: RedGl0w

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

Unread postby parisse » 30 Apr 2021, 09:48

Quand je regarde le script seuil de critor, il me semble qu'il ne nécessite pas d'allocation mémoire interne à MicroPython : toutes les variables sont numériques à taille fixe sauf n mais il reste petit entier pendant le déroulement du script.
Supposons que seuil(0.008) se termine normalement. Dans ce cas, KhiCAS reprend la main et va afficher le résultat, ce qui nécessite des appels à malloc, mais beaucoup moins que n'importe quel calcul effectué en interne par Xcas donc ça me parait peu vraisemblable. D'autant plus que la vidéo de critor montre qu'ensuite on a un "keyboard interrupt".
Donc je penche plutôt sur un problème lorsque MicroPython teste si le clavier est actif pour gérer l'appui de la touche d'interruption pendant le déroulement d'un programme. Il y a une fonction int micropython_port_vm_hook_loop() {...} qui gère ça, et, dans l'implémentation de cette fonction, j'utilise des appels au "SDK C". Si ces appels n'utilisent pas la même interface que dans Delta, ça va bugguer. Et d'ailleurs l'interruption d'un script ne doit probablement pas marcher. Si c'est bien ça, il faudrait peut-être recompiler libmicropy.a.
User avatar
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 86%
 
Posts: 3663
Joined: 13 Dec 2013, 16:35
Gender: Not specified
Calculator(s):
MyCalcs profile

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

Unread postby redgl0w » 30 Apr 2021, 09:53

parisse wrote:Si ces appels n'utilisent pas la meme interface que dans Delta, ca va bugguer.

Malheureusement, le control de version de delta/external est une réelle galère pour l'instant, et il est pour nous presque impossible de pouvoir comparer omega et delta. En effet, il y a les sources de khiCas sur le repo nw-external de zardam, celle que maxime a essayé de fix sur le repo d'omega, delta avec 50 branches, qui datent toutes d'il y a longtemps, donc impossible de savoir laquelle est celle compilée pour zardam/nw-external, ...
Image
User avatar
redgl0wVIP+
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 62.7%
 
Posts: 285
Images: 0
Joined: 30 Oct 2019, 20:36
Location: Grenoble
Gender: Male
Calculator(s):
MyCalcs profile
Class: ENSIMAG 1A
Twitter: Gl0wRed
GitHub: RedGl0w

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

Unread postby critor » 30 Apr 2021, 10:18

parisse wrote:Donc je penche plutôt sur un problème lorsque MicroPython teste si le clavier est actif pour gérer l'appui de la touche d'interruption pendant le déroulement d'un programme. Il y a une fonction int micropython_port_vm_hook_loop() {...} qui gère ça, et, dans l'implémentation de cette fonction, j'utilise des appels au "SDK C". Si ces appels n'utilisent pas la même interface que dans Delta, ça va bugguer. Et d'ailleurs l'interruption d'un script ne doit probablement pas marcher. Si c'est bien ça, il faudrait peut-être recompiler libmicropy.a.


Merci.

Sous Delta+KhiCAS, si je lance un while 1:pass, la seule touche d'annulation me permet d'interrompre le script, et toutes les autres sont sans effet, comportement attendu.

Et effectivement bien vu, sous Omega+KhiCAS quelque chose ne semble pas du tout aller avec le clavier...
N'importe quelle touche me permet d'interrompre le script, et la touche on/off éteint même directement la calculatrice alors que le script est pourtant en cours d'exécution.

Cela expliquerait-il l'ensemble des anomalies que je rencontre avec la version Omega de KhiCAS ?
Scripts qui semblent se figer jusqu'à l'appui sur une touche ?
Scripts qui semblent se terminer sans réponse ni exception ?
Calculatrice qui semble pouvoir s'éteindre (automatiquement ou manuellement) pendant l'exécution de scripts, et retournant dans les deux cas une exception KeyboardInterrupt au rallumage ?

Merci.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 48%
 
Posts: 41981
Images: 15887
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

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

Unread postby parisse » 30 Apr 2021, 10:32

S'il n'y a pas d'anomalies dans l'utilisation de KhiCAS en-dehors de MicroPython, alors oui ca pourrait etre responsable de l'ensemble des anomalies que vous avez constatees. L'implementation de micropython_port_vm_hook_loop incremente un compteur et teste le clavier une fois tous les 2048 appels (pour eviter de ralentir trop la VM).

Code: Select all
int micropython_port_vm_hook_loop() {
  /* This function is called very frequently by the MicroPython engine. We grab
   * this opportunity to interrupt execution and/or refresh the display on
   * platforms that need it. */

  /* Doing too many things here slows down Python execution quite a lot. So we
   * only do things once in a while and return as soon as possible otherwise. */
  static int c = 0;

  ++c;
  if (c & 0x7ff ) {
    return 0;
  }

  // Check if the user asked for an interruption from the keyboard
  int g=getkey(mp_interrupt_char | 0x80000000);
  if (!g) return 0;
  mp_keyboard_interrupt();
  return 1;
}
User avatar
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 86%
 
Posts: 3663
Joined: 13 Dec 2013, 16:35
Gender: Not specified
Calculator(s):
MyCalcs profile

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

Unread postby critor » 30 Apr 2021, 10:48

Merci.

Oui, ces anomalies ne concernent que le mode Micropython de KhiCAS édition Omega.
Elles ne sont pas présentes dans le mode de compatibilité Python.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 48%
 
Posts: 41981
Images: 15887
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

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

Unread postby redgl0w » 30 Apr 2021, 10:59

parisse wrote:S'il n'y a pas d'anomalies dans l'utilisation de KhiCAS en-dehors de MicroPython, alors oui ca pourrait etre responsable de l'ensemble des anomalies que vous avez constatees. L'implementation de micropython_port_vm_hook_loop incremente un compteur et teste le clavier une fois tous les 2048 appels (pour eviter de ralentir trop la VM).

Sur epsilon l'implémentation a changé, et peut être qu'il serait intéressant de faire comme eux : ils vérifient l'appuie de la touche après un certains temps et non pas un certains nombres de cycles.
Image
User avatar
redgl0wVIP+
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 62.7%
 
Posts: 285
Images: 0
Joined: 30 Oct 2019, 20:36
Location: Grenoble
Gender: Male
Calculator(s):
MyCalcs profile
Class: ENSIMAG 1A
Twitter: Gl0wRed
GitHub: RedGl0w

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

Unread postby parisse » 30 Apr 2021, 11:56

redgl0w wrote:Sur epsilon l'implémentation a changé, et peut être qu'il serait intéressant de faire comme eux : ils vérifient l'appuie de la touche après un certains temps et non pas un certains nombres de cycles.

Il faudrait connaitre le cout en temps de l'execution de l'instruction uint64_t t2 = Ion::Timing::millis();, si c'est proche de quelques cycles (incrementation d'un entier et test) alors c'est mieux. Mais vu que j'ai mis la valeur 0x7ff pour le test, la VM doit vraiment appeler tres souvent vm_hook, donc ca ne doit pas changer grand chose.

De toutes facons, ce n'est pas ca qui est en cause ici. En y reflechissant, recompiler libmicropy.a ne servira probablement a rien, par contre il faudrait verifier que l'implementation d'Omega de getkey suit la meme convention que dans Delta, a savoir regarder ce que renvoie getkey(mp_interrupt_char | 0x80000000); avec mp_interrupt_char=5.
D'ailleurs je vois que dans ma version de Delta, la declaration dans nw-external-apps/api/api.c est incorrecte (parametre bool au lieu de int), j'ai:
Code: Select all
int getkey(bool allow_suspend) {
  return ((int (*)(bool))_api_base[74])(allow_suspend);
}

Mais l'implementation dans delta/python/port/port.cpp correspond a ce qui est attendu dans main.c de micropython:
Code: Select all
int getkey(int allow_suspend){
  if (allow_suspend & 0x80000000)
    return iskeydown(allow_suspend & 0xff)?1:0;
...
}

bool iskeydown(int k){
  Ion::Keyboard::State scan = Ion::Keyboard::scan();
  return scan.keyDown(Ion::Keyboard::Key(k));
}

Ca marche malgre l'erreur de declaration bool/int parce qu'un bool en parametre est stocke physiquement comme un int.

Donc voila ce qu'il faudrait verifier sur Omega, d'abord est-ce que le numero de syscall est le bon (((int (*)(bool))_api_base[74])) et ensuite est-ce que l'implementation de getkey est bonne ?
User avatar
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 86%
 
Posts: 3663
Joined: 13 Dec 2013, 16:35
Gender: Not specified
Calculator(s):
MyCalcs profile

PreviousNext

Return to News NumWorks

Who is online

Users browsing this forum: ClaudeBot [spider] and 7 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
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.
896 utilisateurs:
>881 invités
>8 membres
>7 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)