Optimisation de code
Optimisation de code
Bonsoir à tous !
j'ai toujours entendu parler d'optimisation sans pour autant savoir comment ça se fait. j'essaie de de programmer en suivant l'aide purebasic et surtout du forum.
Je vous invite chers Profs en nous en dire plus SVP !
j'ai toujours entendu parler d'optimisation sans pour autant savoir comment ça se fait. j'essaie de de programmer en suivant l'aide purebasic et surtout du forum.
Je vous invite chers Profs en nous en dire plus SVP !
Internet ne manque pas de pages consacrées à ce sujet.
Pour donner une image, l'optimisation ressemble à une recherche d'itinéraire. Là où il s'agit de trouver le meilleur compromis entre la distance parcourue, le temps passé, et éventuellement d'autres paramètres (paysage, etc), l'optimisation d'un code consiste à le rendre plus rapide à l'exécution (important pour les calculs intensifs), plus court (en supprimant les instructions superflues), et éventuellement plus élégant (l'idéal à atteindre étant l'algo "parfait" sur lequel on n'aura pas à revenir).
Un exemple d'optimisation reprenant ces trois principes est celui intervenant sur le tracé d'une ligne. Il y a plusieurs façons d'effectuer cette tâche, mais les contraintes inhérentes à l'affichage et au calcul sur les nombres entiers fait qu'il est bien plus efficace d'utiliser l'algo de bresenham. Je t'invite à faire une recherche là-dessus.
Pour donner une image, l'optimisation ressemble à une recherche d'itinéraire. Là où il s'agit de trouver le meilleur compromis entre la distance parcourue, le temps passé, et éventuellement d'autres paramètres (paysage, etc), l'optimisation d'un code consiste à le rendre plus rapide à l'exécution (important pour les calculs intensifs), plus court (en supprimant les instructions superflues), et éventuellement plus élégant (l'idéal à atteindre étant l'algo "parfait" sur lequel on n'aura pas à revenir).
Un exemple d'optimisation reprenant ces trois principes est celui intervenant sur le tracé d'une ligne. Il y a plusieurs façons d'effectuer cette tâche, mais les contraintes inhérentes à l'affichage et au calcul sur les nombres entiers fait qu'il est bien plus efficace d'utiliser l'algo de bresenham. Je t'invite à faire une recherche là-dessus.
'alut,
Il y avait un super post qui avait commencé sur ça sur le forum, je le retrouve pas
Sur le net tu trouveras sûrement beaucoup d'exemples(recherche "optimisation de code" par exemple , tu tomberas peut-être sur developpez.com où il y a parfois des choses très intéressantes
), il y a souvent des astuces qui sont indépendantes du langage utilisé(gestion des boucles, tris, tableaux, graphismes etc....)!
Hasta la vista!
Il y avait un super post qui avait commencé sur ça sur le forum, je le retrouve pas

Sur le net tu trouveras sûrement beaucoup d'exemples(recherche "optimisation de code" par exemple , tu tomberas peut-être sur developpez.com où il y a parfois des choses très intéressantes

Hasta la vista!
En utilisant ce code tu pourras essayer d'optimiser ton code ( du moins pou la vitesse )
Code : Tout sélectionner
; Idea from Erix14 / Djes
; Return the time elapsed between Start & Stop in second
; 0.001 = 1 ms
; 0.000001=1 µs
; Caution ! : If the installed hardware supports a high-resolution performance counter
; MeasureIntervalHiResStart return 1 / 0 if no hardware support
Global MeasureIntervalTime.l
ProcedureDLL MeasureIntervalHiResStart()
QueryPerformanceFrequency_(@retour)
If retour <>0 : retour = 1 : EndIf
QueryPerformanceCounter_(@MeasureIntervalTime)
ProcedureReturn retour
EndProcedure
ProcedureDLL.f MeasureIntervalHiResStop()
QueryPerformanceCounter_(@Temp)
Difference=Temp-MeasureIntervalTime
QueryPerformanceFrequency_(@HiResTimerFrequency)
Periode.f=1/HiResTimerFrequency
DureeTotale.f=Difference*Periode
ProcedureReturn DureeTotale
EndProcedure
;/ Test
If MeasureIntervalHiResStart()
Delay(1)
Debug MeasureIntervalHiResStop()
EndIf
Merci à vous pour ces informations
@ Droopy le code me sera super utile car je bosse sur un projet qui m'a déjà pris plus de cinquante procédures.
Cependant j'ai encore une question concernant les macros et procedures
la quelle me conseillez-vous ? oui je sais qu'une macro ne retourne pas de résultat (Typés) comme les procédures. Pour etre simple, à quoi servent plus concretement les macros ?
@ Droopy le code me sera super utile car je bosse sur un projet qui m'a déjà pris plus de cinquante procédures.
Cependant j'ai encore une question concernant les macros et procedures
la quelle me conseillez-vous ? oui je sais qu'une macro ne retourne pas de résultat (Typés) comme les procédures. Pour etre simple, à quoi servent plus concretement les macros ?
Les macro, c'est de la précompilation, en fait, ca remplace ton macro par le code contenu dans le macro. En clair ton code source sera plus petit et propre, mais la version compilée fera exactement la meme taille que si tu n'avais pas utilisé de macro dutout.
A l'opposé, les procédures sont des "morceaux de code appelable", comprendre qu'elles sont présentes une fois dans le fichier compilé et qu'on les appelle quand on veut. L'executable est donc finalement plus petit.
Mais attention, plus petit ne veut pas dire plus rapide, en effet appeller une fonction rend ton code un peu plus lent que d'avoir un macro ou le code directement tapé.
Au final, il faut trouver le bon équilibre, sans oublier le principe des variables partagées, globales ou locales, qui permettent de bricoler des optimisations sympa dans certain cas. J'utilise beaucoup les procedure puis ce qu'une majorité de mes programmes sont tres peu consomants (puis ce que tres simples), je privilégie ainsi la taille. Dans un programme ou chaque cycle de processeur est utile, il faudra minimiser les procedures donc... Mais je doute que quelqu'un sur ce forum en soit là.
Dernier détail, c'est les threads qui deviennent important dans l'optimisation au fur et à mesure que l'HT, les dualcore et plus se démocratisent.
Vala. Et si j'ai dit une connerie, pataper hein!
A l'opposé, les procédures sont des "morceaux de code appelable", comprendre qu'elles sont présentes une fois dans le fichier compilé et qu'on les appelle quand on veut. L'executable est donc finalement plus petit.
Mais attention, plus petit ne veut pas dire plus rapide, en effet appeller une fonction rend ton code un peu plus lent que d'avoir un macro ou le code directement tapé.
Au final, il faut trouver le bon équilibre, sans oublier le principe des variables partagées, globales ou locales, qui permettent de bricoler des optimisations sympa dans certain cas. J'utilise beaucoup les procedure puis ce qu'une majorité de mes programmes sont tres peu consomants (puis ce que tres simples), je privilégie ainsi la taille. Dans un programme ou chaque cycle de processeur est utile, il faudra minimiser les procedures donc... Mais je doute que quelqu'un sur ce forum en soit là.
Dernier détail, c'est les threads qui deviennent important dans l'optimisation au fur et à mesure que l'HT, les dualcore et plus se démocratisent.
Vala. Et si j'ai dit une connerie, pataper hein!
Tu rigoles?poshu a écrit : Dans un programme ou chaque cycle de processeur est utile, il faudra minimiser les procedures donc... Mais je doute que quelqu'un sur ce forum en soit là.

Les macros servent aussi à créer des pseudo-instructions pour améliorer la lisibilité du code. Tu peux ainsi remplacer totalement les instructions de purebasic, par exemple remplacer "for" par "pour", print par "ecrit", etc!
Un autre exemple pour ceux qui utilisent les degrés (au lieu des radians, long débat, pfiou!) et qui font souvent des conversions : au lieu d'utiliser une procédure (qui ralentit le code puisque le processeur doit empiler les variables, faire un saut, dépiler, refaire un saut, etc.), faire une macro qui fait le même job mais qui sera remplacée au moment de la compilation par le code.