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 ---
- 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 ---
Modérateur : Jérémy
Connaitre le temps d'éxecution d'une instruction
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
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
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
Connaitre le temps d'éxecution d'une instruction
- Claudius
Passionné- Messages : 260
- Âge : 69
- Enregistré en : septembre 2015
- Localisation : ELANCOURT (78 - YVELINES)
- Contact :
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
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
Enregistreur de traces GPS & Boussole GPS parlante (PIC & Arduino)
Connaitre le temps d'éxecution d'une instruction
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonsoir Claudius,
Voila ce que le compilateur dans le fichier .asm :
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.
Voila ce que le compilateur dans le fichier .asm :
Code : Tout sélectionner
;LCD.c,122 :: i = i + 1 ;
INFSNZ _i+0, 1
INCF _i+1, 1
;LCD.c,123 :: i++;
INFSNZ _i+0, 1
INCF _i+1, 1
;LCD.c,124 :: i += 1;
INFSNZ _i+0, 1
INCF _i+1, 1
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.
Connaitre le temps d'éxecution d'une instruction
- Claudius
Passionné- Messages : 260
- Âge : 69
- Enregistré en : septembre 2015
- Localisation : ELANCOURT (78 - YVELINES)
- Contact :
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...
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...
Enregistreur de traces GPS & Boussole GPS parlante (PIC & Arduino)
Connaitre le temps d'éxecution d'une instruction
bonjour
OUI c'est la viewtopic.php?f=10&t=194
sinon STOPWATCH sous mplabX et que tu dois avoir sur MICROC
A+
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
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
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
redonne la main apres 12.109 -9.546 = > 2.56 sec
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
Connaitre le temps d'éxecution d'une instruction
- Claudius
Passionné- Messages : 260
- Âge : 69
- Enregistré en : septembre 2015
- Localisation : ELANCOURT (78 - YVELINES)
- Contact :
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 )
Enregistreur de traces GPS & Boussole GPS parlante (PIC & Arduino)
Connaitre le temps d'éxecution d'une instruction
Connaitre le temps d'éxecution d'une instruction
Connaitre le temps d'éxecution d'une instruction
bonjour
Tient pour ton test j'ai trouvé cela: un simple chargement d'une variable
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% 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
Tient pour ton test j'ai trouvé cela: un simple chargement d'une variable
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% 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 38 invités