Benchmarks sur le Basic Casio
Posté le 22/08/2017 15:08
Dans ce topic, je publierai divers benchmarks afin d'optimiser le basic.
Tous les benchmarks sont à +/- 50 ms et sont réalisés sur l'émulateur OS 2.00.
Variables
1000 itérations de
1->var : var=1 pour mesurer la lecture et l'écriture.
A : 1367 ms
Z : 1369 ms
θ : 1399 ms
r : 1367 ms
a0 : 2084 ms
c2 : 2100 ms
List 1[1] : 4915 ms
List 26[1] : 5032 ms
List 1[999] : 5017 ms
Mat A[1,1] : 2950 ms
Mat A[10,10] : 2948 ms
On remarque que les matrices sont plus rapides que les listes, et qu'il faut réserver les variables non-alphanumériques à un usage qui en convient (par exemple, la sélection du menu ou le niveau actuel). Le rang des listes/matrices ne fait aucune différence.
moins binaire / moins unaire
Les 2 sont égaux.
Chaine de conditions
1000 itérations avec différentes méthodes pour
A=1 ou A=2 ou A=3 ou A=4, avec A=3.
A=1 Or A=2 Or A=3 Or A=4 : 2867 ms
{1,2,3,4}=A : Max(List Ans) : 6451 ms
Sum ({1,2,3,4}=A) : 2949 ms
(A=1) + (A=2) + (A=3) + (A=4) : 3151 ms
Utiliser les conditions est donc la méthode la plus rapide. Mes tests avec And donnent des résultats similaires.
Opérateur Not
Not 1 : 5018 ms
1=0 : 5546 ms
Le Not est plus rapide.
Strings
200 itérations de
Exp->Str(<str>, Str 1) : StrRotate(Str 1, 1) : Str 1 -> <str>.
Strings normaux : 267ms
Strings graphiques (Xt, Yt) : 5467 ms
Strings fonctions (fn1 ou f1) : 1133 ms
Strings récurrence ([abc]n/n+1/n+2) : 3133 ms
Si vous avez d'autres idées de benchmarks à faire dites le dans les commentaires (ou sur la shout, ça évite le spam).
Citer : Posté le 22/08/2017 16:07 | #
Tous les benchmarks sont à +/- 50 ms [...]
A : 1367 ms
Tu es fort pour donner autant de chiffres alors que t'es à ±50 ms ! Personnellement, je me contenterais de « A : 1.35 s » pour être fidèle à la précision de tes mesures.
Tu peux donner les chiffres pour les deux moins, histoire qu'on constate nous-même. Et puis ça peut aider pour comparer avec d'autres opérateurs.
J'imagine que pour les strings normaux tu n'as pas exécuté Exp→Str() ?
Citer : Posté le 22/08/2017 16:16 | #
Lephé, tu me donnes des flashbacks des cours de physique è_é
Pour les 2 moins j'ai 4317/4351 ms (binaire/unaire) puis 4332/4337. Ils sont effectivement égaux. Par contre je ne sais plus combien d'itérations (et pour la comparaison avec d'autres opérateurs, on devrait comparer -1 et +1 ce qui est inutile car ils ne servent pas à faire la même chose).
Pour les strings normaux je n'ai pas exécuté Exp->Str (ce qui explique la différence avec tous les autres strings).
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 22/08/2017 17:01 | #
J'adore !
Très bonne initiative ! Un test On-calc serait préférable quand même.
Vérifier les différences en temps d'accès aux List, Math, variables alphanumériques ou pas est une très bonne idée. Essaye en écriture maintenant
J'aurai d'autres test à te proposer
Citer : Posté le 22/08/2017 17:07 | #
J'ai vérifié en lecture et en écriture, après il serait intéressant de vérifier séparément mais je doute qu'il y aurait une différence.
Le test on-calc serait préférable mais pour mesurer efficacement il faudrait un addin qui agit dans le même style que PRGM2 : il mesure le début/fin non pas en regardant l'écran mais en regardant la valeur d'une variable, ce qui serait effectivement plus précis.
Je coderai peut être ça un jour, mais ça me paraît inutile d'avoir une si grande précision : si 2 méthodes différentes sont distantes de 50 ms, ça ne fera absolument aucune incidence sur le gameplay, et donc elles devraient être considérées comme égales.
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 22/08/2017 17:13 | #
Tu as toi vu que l'émulateur est plus rapide que la calto il y a pas longtemps je te rappelle
Fais un test qui boucle 10000 fois, tu mesures à la montre on calc (ou avec une vidéo tu mesures le temps en regardant la timeline) et le même test sur émulateur pour voir si les résultats sont proches. Parce que si l'émulateur de réagit pas comme la calto ton travail ne servira pas
Citer : Posté le 22/08/2017 17:18 | #
Ou alors tu utilises un add-in pour faire la mesure à ta place, et tu joues de l'e-strip. Il y a du potentiel pour descendre tes mesures à une précision bien inférieure à la milliseconde, même si ce serait déjà pas mal que tu n'aies pas à arrondir tous tes beaux travaux actuels.
Citer : Posté le 22/08/2017 17:19 | #
L'émulateur est plus rapide mais rien ne dit que certaines fonctions sont plus rapides que d'autres (et je ne vois pas pourquoi ce serait le cas). L'augmentation de vitesse n'influe pas sur les rapports des durées d'exécution, les variables alphanumériques seront toujours plus rapides que les variables de récurrence, etc.
Puis la montre c'est pas vraiment un truc super précis
Mais bon, si besoin je coderai demain cet addin (il me parait pas très dur à coder) pour tester sur les caltos réelles.
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 22/08/2017 17:29 | #
Tu t'appuies d'une conviction personnelle. Rien ne t'assure que les rapports de vitesse soient les mêmes on-calc. Et encore moins qu'ils soient suffisamment pertinents, du moins autant que sur émulateur
Sinon, la mesure à la montre est très précise à partir du moment où la mesure dure longtemps. Si tu te trompes d'une seconde sur une mesure d'une minute, ça te fait que 1.6% d'erreur... C'est négligeable.
Et puis une montre, ça peut être le chrono de ton téléphone voyons :P
Ajouté le 22/08/2017 à 17:33 :
Une histoire que j'ai vécu : le PPE de première, des gens de ma classes ont fabriqué un anémomètre. Ils sont passé devant le jury, ils ont bien montré que quand le vent souffle fort, la vitesse mesuré augmente. et inversement.
Mais un juré leur a demandé si à partir de leur mesure, ils pouvaient donner la valeur en m/s de la vitesse du vent...
Ils sont resté bouche cousue...
C'est un peu ce qu'il risque de t'arriver là
Ajouté le 22/08/2017 à 17:35 :
Je ne connais pas nonplus ton protocole, mais un benchmark sur ordinateur se répète, et on garde la moyenne
Citer : Posté le 22/08/2017 18:40 | #
J'avais fait un benchmark similaire en 2010 / 2011. Regarde dans ma signature.
Vitesse des fonctions en Basic Casio | 7 days CPC | Casio Universal Wiki | Tutoriel Basic Casio
>>> Give me a click Brother <<< >>> Teste mon générateur de mots nouveaux <<<
>>> Random Youtube Video <<<
Citer : Posté le 06/12/2019 17:19 | #
Salut !
J'ai fait un benchmark rapide sur ma calculatrice sur la vitesse d'assignation et incrémentation de A~Z contre Ans.
Le résultat est assez étonnant.
For 1→A To 5000
Next
1→B
For 1→A To 5000
Isz B
Next
1
For 1→A To 5000
Ans+1
Next
Ans+1 est deux fois plus lent que Isz.
For 1→A To 5000
1→B
Next
For 1→A To 5000
1
Next
1 et 1→B s'exécutent à la même vitesse.
C'est ce second résultat qui m'a le plus étonné, je m'attendais à ce que l'interpréteur soit plus rapide à l'assignation de Ans que B. C'est une information qui peut-être précieuse à l'optimisation de certains programmes
Citer : Posté le 06/12/2019 17:22 | #
Intéressant ! Merci pour l'information. Ans coûte cher, finalement...
Citer : Posté le 07/12/2019 05:57 | #
Test the speed of the draw comands
PlotOn vs PixelOn and also when the pixel is off screen PlotOff 999999, 99999999
Speed of different loops
Lbl, For, While etc
Test both the 'pass through' speed (when the loop is set to 1) and the actual loop speed
For 1->X To 1 : Next and For 1->X To 1000 : Next
For geting key inputs I found this to be really fast (pass through speed is needed more than just the loop speed)
Lbl 0
GetKey -> K
Dsz N
Not K⇒Goto 0
using multiple ⇒ rather than a single If statement
//`Is faster than
A+3 -> A