Page 1 sur 1
Optimisation de code
Publié : lun. 05/nov./2007 23:20
par SpaceMan
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 !
Publié : mar. 06/nov./2007 14:15
par djes
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.
Publié : mar. 06/nov./2007 15:11
par SpaceMan
Merci djes pour ces précieuses informations
je vais de ce part en savoir plus

Publié : mar. 06/nov./2007 18:06
par Huitbit
'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!
Publié : mar. 06/nov./2007 18:12
par Dr. Dri
Huitbit a écrit :'alut,
Il y avait un super post qui avait commencé sur ça sur le forum, je le retrouve pas
peut-être le topic sur les astuces de codes mathématiques en annonce dans le forum trucs et astuces ?
Dri
Publié : mar. 06/nov./2007 22:25
par Droopy
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
Publié : mer. 07/nov./2007 20:34
par SpaceMan
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 ?
Publié : jeu. 08/nov./2007 17:20
par poshu
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!
Publié : jeu. 08/nov./2007 17:42
par djes
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à.
Tu rigoles?
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.
Publié : jeu. 08/nov./2007 20:03
par SpaceMan
sympa les infos
je crois que je vais me lancer dans les macros vu qu'elles ont pas mal d'avantages et si elle peuvent m'aider à optimiser mes codes tant mieux

Publié : ven. 09/nov./2007 17:00
par poshu
djes a écrit :Tu rigoles?
Au temps pour moi alors.
