π
<-

Optimisation et gestion des listes sur Nspire

Pour le TI-Basic sur Nspire

Optimisation et gestion des listes sur Nspire

Message non lude Levak » 17 Mar 2011, 14:20

Bonjour à tous,
Je vous présente aujourd'hui les résultats d'une démarche expérimentale que j'ai réalisée sur des optimisations possibles de vos programmes utilisant intensément les listes (Comme Make3D pour ma part).

Déjà, tout le monde l'aura remarqué, la gestion des listes sur Nspire est horrible; rajouter un élément demande un temps quadratiquement proportionnel au nombre d'éléments déjà présents dans la liste. Pourtant cela n'est pas anodin.

Dans un premier temps j'ai alors réalisé un mini gestionnaire de mémoire virtuelle totalement en TI-Basic afin de voir si la gestion des listes foireuse était due à un mauvais code. Après plusieurs benchs, il s'est avéré que l'ajout d'éléments était beaucoup plus rapide (création d'un nouveau bloc, assignation de la valeur), mais la suppression, elle demandait un temps supplémentaire non négligeable. Si on compte création puis suppression, les benchs de ma mémoire virtuelle équivalaient à ceux des fonctions préconçues. Ce test est important pour comprendre la conclusion.

Quelques mois se sont écoulés, j'ai acquis de nouvelles connaissances algorithmiques, notamment sur la gestion de blocs dynamiques et listes chaînées. En effet si les listes implémentées étaient dynamiques l'accès à un Ieme élément serait beaucoup plus long. Etant donné que je n'ai pas réalisé de benchs convainquant sur l'accès des éléments, car de durée infime, cela ne prouvait rien. En effet, en structure dynamique, ajouter un élément en fin nécessite de parcourir toute la liste.

C'est donc là que j'ai pensé à un petit test avec la fonction augment(list, list).

Ajout en fin (durée : 15 secondes):
l:={}:for i, 1, 1000:l:=augment(l, {i}):Endfor:1

En tête (durée : 15 secondes):
l:={}:for i, 1, 1000:l:=augment({i}, l):Endfor:1

Fort est-il de constater que ce n'est pas une structure dynamique étant donné que la concaténation de deux listes ne dépend pas de la longueur de la 1ere.
La seule possibilité est donc l'inverse de la structure dynamique, c'est donc la structure statique où les éléments de la liste sont contigus dans la mémoire donnant un accès et des modifications rapides. Ainsi, on comprend la lenteur de la fonction augment(). A chaque appel de cette fonction, la Nspire va recréer un tableau de longueur X+Y en y recopiant chaque valeur de la liste X et de la liste Y.

La solution est donc, comme en C, de connaître la taille finale de la liste pour l'initialiser uniquement au début.

l:=newList(1000):for i, 1, 1000:l[i] = i:Endfor:1

prend 5 secondes contre 15 auparavant.


edit pour Bisam.
Responsable design/graphique de TI-Planet
I do not get mad at people, I just want them to learn the way I learnt.
ImageTNOC [topic][DL]
nClock [topic][DL]
HideManager [topic][DL]
ZLock [topic][DL]
Theme Editor [topic][DL]
Mes programmes
Avatar de l’utilisateur
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 98.9%
 
Messages: 6414
Images: 22
Inscription: 27 Nov 2008, 00:00
Localisation: 0x1AACC355
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: BAC+5: Epita (ING3)

Re: Optimisation et gestion des listes sur Nspire

Message non lude critor » 17 Mar 2011, 14:22

Bravo.

Mais effectivement je me doutais que les listes TI étaient de simples tableaux dynamiques.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 54.7%
 
Messages: 42528
Images: 17406
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Optimisation et gestion des listes sur Nspire

Message non lude Levak » 17 Mar 2011, 14:25

critor2000 a écrit:Bravo.

Mais effectivement je me doutais que les listes TI étaient de simples tableaux dynamiques.


Non justement, ils sont statiques.
Responsable design/graphique de TI-Planet
I do not get mad at people, I just want them to learn the way I learnt.
ImageTNOC [topic][DL]
nClock [topic][DL]
HideManager [topic][DL]
ZLock [topic][DL]
Theme Editor [topic][DL]
Mes programmes
Avatar de l’utilisateur
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 98.9%
 
Messages: 6414
Images: 22
Inscription: 27 Nov 2008, 00:00
Localisation: 0x1AACC355
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: BAC+5: Epita (ING3)

Re: Optimisation et gestion des listes sur Nspire

Message non lude Lionel Debroux » 17 Mar 2011, 17:51

La gestion des listes n'est pas mieux que sur les TI-68k, je vois...
Peut-être utilisent-ils toujours le même genre d'algorithmes pour next_expression_index, sans avoir pris en compte le fait que Samuel Stearley avait fait 3-4 fois plus rapide pour cette routine cruciale...
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Avatar de l’utilisateur
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 11.4%
 
Messages: 6875
Inscription: 23 Déc 2009, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: -
GitHub: debrouxl

Re: Optimisation et gestion des listes sur Nspire

Message non lude Bisam » 17 Mar 2011, 17:54

A mon avis, le plus efficace est d'utiliser la fonction "seq".

l:=seq(i,i,1,10000)

prend environ 5 secondes, affichage compris, ce qui est donc 10 fois plus rapide que la solution que tu proposes lorsque l'on connaît à la fois la longueur et les valeurs. Malheureusement, c'est rarement le cas.

Sans l'affichage, en tapant

l:=seq(i,i,1,15000):1

cela prend moins d'une seconde... mais on ne peut pas aller bien au-delà pour les tests sans avoir un "Dépassement de ressources. Calcul impossible".



PS : Pourquoi utilises-tu "matlist(newmat(1,1000))" au lieu de "newlist(1000)" ?
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5670
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Optimisation et gestion des listes sur Nspire

Message non lude Levak » 17 Mar 2011, 20:31

Bisam a écrit:A mon avis, le plus efficace est d'utiliser la fonction "seq".

cela prend moins d'une seconde... mais on ne peut pas aller bien au-delà pour les tests sans avoir un "Dépassement de ressources. Calcul impossible".


seq() va justement instancier un nouveau tableau de 1000 éléments et les remplir de manière itérative.
Cela appuis donc mon raisonnement.

En fait, pour Make3D je ne peux pas utiliser seq() car c'est un raisonnement de simulation de face, j'aménage moi-même ma liste avec des éléments à undef pour couper le trait du nuage de point. Or j'utilise augment(), d'où la lenteur...

PS : Pourquoi utilises-tu "matlist(newmat(1,1000))" au lieu de "newlist(1000)" ?

Je l'avais cherchée rapidement dans la bibliothèque sans succès... maintenant, si elle existe ...
Responsable design/graphique de TI-Planet
I do not get mad at people, I just want them to learn the way I learnt.
ImageTNOC [topic][DL]
nClock [topic][DL]
HideManager [topic][DL]
ZLock [topic][DL]
Theme Editor [topic][DL]
Mes programmes
Avatar de l’utilisateur
LevakAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 98.9%
 
Messages: 6414
Images: 22
Inscription: 27 Nov 2008, 00:00
Localisation: 0x1AACC355
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: BAC+5: Epita (ING3)

Re: Optimisation et gestion des listes sur Nspire

Message non lude Loulou 54 » 18 Mar 2011, 18:58

Il faudrait que je regarde si ça fait la même chose sur 68k, ce qui fort probable. J'utilisais souvent la méthode "lente" justement.

EDIT : :cask: En effet, j'ai le même résultat sur TI 89 !

10 secondes pile pour une liste de 100 pour la méthode "longue"
contre 4 secondes pile pour une liste de 100 pour l'autre méthode ! :#top#:
[test réalisé sur VTI, la calculatrice physique mettrait sûrement moins de temps]

Cette méthode nécessite cependant de connaître à l'avance le nombre d'éléments de la liste, ce qui n'est pas toujours le cas, mais sinon, c'est bon à savoir !! =)
Mes programmes => ici !
Avatar de l’utilisateur
Loulou 54Premium
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Prochain niv.: 1.7%
 
Messages: 1988
Images: 8
Inscription: 02 Aoû 2009, 00:00
Localisation: 54, près de Metz
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Ingé Logiciel chez Amazon

Re: Optimisation et gestion des listes sur Nspire

Message non lude Lionel Debroux » 18 Mar 2011, 19:29

[test réalisé sur VTI, la calculatrice physique mettrait sûrement moins de temps]

A moins que tu utilises une machine particulièrement asthmatique de nos jours (type Pentium 100), non. Les vitesses de VTI et TIEmu sont plutà´t fidèles :):

Mais 4 secondes, pour créer une liste de 100 éléments (des entiers, de plus), est déjà  de l'abus...
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Avatar de l’utilisateur
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 11.4%
 
Messages: 6875
Inscription: 23 Déc 2009, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: -
GitHub: debrouxl

Re: Optimisation et gestion des listes sur Nspire

Message non lude Folco » 18 Mar 2011, 20:08

lea -100*4(sp),sp
4 micro-secondes :D:
Avatar de l’utilisateur
Folco
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Prochain niv.: 21.5%
 
Messages: 150
Inscription: 23 Sep 2010, 00:00
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: anapu :p

Re: Optimisation et gestion des listes sur Nspire

Message non lude Loulou 54 » 18 Mar 2011, 20:15

Lionel Debroux a écrit:
[test réalisé sur VTI, la calculatrice physique mettrait sûrement moins de temps]

A moins que tu utilises une machine particulièrement asthmatique de nos jours (type Pentium 100), non. Les vitesses de VTI et TIEmu sont plutôt fidèles :):

Mais 4 secondes, pour créer une liste de 100 éléments (des entiers, de plus), est déjà de l'abus...


Ti Emu, je n'ai pas fait gaffe, mais avec VTI, j'ai plus que l'impression que tout est plus lent ! (pas énormément non plus bien sûr.)
Bon, sauf si on décoche "restrict to actuall speed" :D:
Mes programmes => ici !
Avatar de l’utilisateur
Loulou 54Premium
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Prochain niv.: 1.7%
 
Messages: 1988
Images: 8
Inscription: 02 Aoû 2009, 00:00
Localisation: 54, près de Metz
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Ingé Logiciel chez Amazon

Suivante

Retourner vers Nspire-Basic

Qui est en ligne

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

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Ndless for CX 4.5.5 / CX II 6.2.0
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 !
12345
-
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.
3850 utilisateurs:
>3809 invités
>33 membres
>8 robots
Record simultané (sur 6 mois):
43991 utilisateurs (le 10/09/2025)
-
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)