Optimisation de code

Sujets variés concernant le développement en PureBasic
SpaceMan
Messages : 290
Inscription : mar. 26/oct./2004 19:35
Contact :

Optimisation de code

Message 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 !
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message 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.
SpaceMan
Messages : 290
Inscription : mar. 26/oct./2004 19:35
Contact :

Message par SpaceMan »

Merci djes pour ces précieuses informations
je vais de ce part en savoir plus :D
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

Message 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 :P), il y a souvent des astuces qui sont indépendantes du langage utilisé(gestion des boucles, tris, tableaux, graphismes etc....)!

Hasta la vista!
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message 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
SpaceMan
Messages : 290
Inscription : mar. 26/oct./2004 19:35
Contact :

Message 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 ?
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Message 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!
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message 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? :lol:
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.
SpaceMan
Messages : 290
Inscription : mar. 26/oct./2004 19:35
Contact :

Message 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 :D
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Message par poshu »

djes a écrit :Tu rigoles? :lol:
Au temps pour moi alors. :oops:
Répondre