Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
On parle des Pics, sans rapport avec le langage ou la programmation

Modérateur : Jérémy

Connaitre le temps d'éxecution d'une instruction
Jérémy
Administrateur du site
Administrateur du site
Messages : 2723
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#1 Message par Jérémy » ven. 8 avr. 2016 19:27

Bonjour à tous ,

Existe-t-il un document ou une façon de connaitre le temps d’exécution d'une instruction ?

Quand on souhaite optimiser son code par exemple, il serait intéressant de savoir ce que l'on peut "optimiser" en terme de vitesse ou de mémoire .

Par exemple quels sont les différences (taille occupé, vitesse) entre

a = a + 1 ;
a++;
a += 1;

Merci
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Connaitre le temps d'éxecution d'une instruction
Claudius
Avatar de l’utilisateur
Passioné
Passioné
Messages : 260
Âge : 69
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#2 Message par Claudius » ven. 8 avr. 2016 19:43

Bonsoir,

Regarder le code assembleur généré, utiliser la table des instructions du µC et en fonction du compilateur et de ses options d'optimisation cela peut aller du simple au double. Il est même possible que le compilateur ne génère aucun code si a ... n'est pas utilisé dans le code ;-)

Connaitre le temps d'éxecution d'une instruction
Jérémy
Administrateur du site
Administrateur du site
Messages : 2723
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#3 Message par Jérémy » ven. 8 avr. 2016 20:43

Bonsoir Claudius,

Voila ce que le compilateur dans le fichier .asm :

Code : Tout sélectionner

;LCD.c,122 ::                 ;
        
INFSNZ      _i+0
        INCF        _i
+1
;LCD.c,123 ::                 i++;
        
INFSNZ      _i+0
        INCF        _i
+1
;LCD.c,124 ::                 += 1;
        
INFSNZ      _i+0
        INCF        _i
+11


J'en déduis que sur ce coup c'est la même chose.

Il faudrait que je trouve un exemple simple, qui fais la même chose, et qui compile différemment pour voir.
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Connaitre le temps d'éxecution d'une instruction
Claudius
Avatar de l’utilisateur
Passioné
Passioné
Messages : 260
Âge : 69
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#4 Message par Claudius » sam. 9 avr. 2016 11:10

Bonjour,

Tout d'abord en Langage C, i += 1; est un raccourci de i = i + 1; ;-)
Maintenant et toujours en Langage C, i++; (comme d'ailleurs ++i;) est équivalent à l'écriture précédente dans la mesure où i n'est pas utilisé avant (comme après) son incrémentation...

C'est vrai qu'il faut trouver des séquences d'instructions un peu plus "complexes" pour provoquer une optimisation visible ;-)

Le code assembleur généré (avec ici i sur 16 bits MSB:LSB et donc avec incrément du MSB si LSB passe à 0 si µC 8 bits) ne peut pas être plus court ici...

Connaitre le temps d'éxecution d'une instruction
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#5 Message par Guest » sam. 9 avr. 2016 14:59

bonjour

OUI c'est la viewtopic.php?f=10&t=194
sinon STOPWATCH sous mplabX et que tu dois avoir sur MICROC

A+

Connaitre le temps d'éxecution d'une instruction
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#6 Message par paulfjujo » sam. 9 avr. 2016 19:18

bonjour,

sinon STOPWATCH sous mplabX et que tu dois avoir sur MICROC


Oui, tout à fait sous MikroC, mais en mode debugger seulement.
comptage du nb de cycles et duree correspondante
en gerant bien les points d'arret pour RAZER le compteur au depart.
et le stopper en fin. ( ou alors faire que du pas à pas)

Pour les applis en RUN normal, j'utilise le terminal VBRAY et le timeStamp affiché sur reception d'un <CR>
pour mesurer la duree d'une fonction
un UART_WRITE(13); au debut et un à la fin de la fonction ...
on voit l'ecart de duree sur le terminal..à +-50mS ...
on est loin du cycle machine..mais peut servir dans certains cas .

exemple test duree de reponse sur commande reset module WIFI3

21:30:09.546> Step 1
21:30:09.546> Reseting Module : AT+RST
21:30:09.546>
21:30:12.046> AT+RST
21:30:12.046>
21:30:12.046>
21:30:12.046> OK
21:30:12.109> PÂXòÂHXÿ
21:30:12.109> [Vendor:www.ai-thinker.com Version:0.9.2.4]
21:30:12.109>
21:30:12.109> ready

redonne la main apres 12.109 -9.546 = > 2.56 sec
Aide toi, le ciel ou FantasPic t'aidera

Connaitre le temps d'éxecution d'une instruction
Claudius
Avatar de l’utilisateur
Passioné
Passioné
Messages : 260
Âge : 69
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#7 Message par Claudius » sam. 9 avr. 2016 19:54

paulfjujo a écrit:
on voit l’écart de durée sur le terminal..à +- 50 mS ...
on est loin du cycle machine..mais peut servir dans certains cas.

Certes mais c'est quand même important ces +- 50 mS (c'est grosso modo plus de 2 fois la durée d'une acquisition + un traitement + une visualisation d'une partie d'une trame GPS avec présentation sur 4 afficheurs 7-segments et émission à 4800 bauds en temps réel des informations pertinentes (temps GMT, latitude, longitude, altitude, cap et vitesse en km/h) vers une carte logger sur clé USB avec ... un pic 16f628 cadencé à 4 MHz et programmé en assembleur cela va de soit ... persistance rétinienne oblige ;-))

Connaitre le temps d'éxecution d'une instruction
Jérémy
Administrateur du site
Administrateur du site
Messages : 2723
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#8 Message par Jérémy » sam. 9 avr. 2016 20:41

Merci à tous,

Il faut vraiment que j'étudie un peu mon IDE, je suis à la rue de ce coté la aussi .
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Connaitre le temps d'éxecution d'une instruction
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#9 Message par Guest » sam. 9 avr. 2016 21:03

paulfjujo a écrit :
Oui, tout à fait sous MikroC, mais en mode debugger seulement


sous MPLABX uniquement sous debug cela suffit largement . Je l'utilise assez souvent pour gratter quelques cycles :lol:

bonne soirée

A+

Connaitre le temps d'éxecution d'une instruction
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#10 Message par Guest » dim. 10 avr. 2016 08:39

bonjour

Tient pour ton test j'ai trouvé cela: un simple chargement d'une variable

resultat.png

comme toujours explication:
c'est le désassemblage de la commande, charge Ch de la valeur 34 (ligne 23,25)
la 25 début du résultat on charge bien le registre W de la valeur 34 pour le registre W voir le tuto en ASM
ligne 26,27 on s'assure bien que l'on est dans la banque 0 pour banque voir tuto

Jusque la tout va bien

ligne 28 on charge une variable temporaire qui est a l'adresse 0x26 de la valeur contenue dans W
ligne 29 on transfert dans W la valeur contenue dans la variable temporaire

Je ne sais pas si tu vois, incommensurable connerie, depuis la ligne 25, le registre W contient 34, on fait un allez et un retour dans une variable, on ne sait pas pourquoi.Pour au final ligne 30 , mettre enfin la valeur 34 ,contenue dans le registre W dans la variable Ch

Je te laisse apprécier le commentaire du compilateur, qui dit en gros , c'est gratuit, mais on peut faire mieux, jusqu’à 400% :lol: imagine, pour tout un programme non optimisé, tu comprends pourquoi, j'ai abandonné le C

Donc bon essai optimisation

A+

PS: pour les banques on est sous 16F
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.


Retourner vers « Généralités sur les PICs »

Qui est en ligne

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