PureBasic

Forums PureBasic
Nous sommes le Sam 25/Mai/2013 13:49

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 3 messages ] 
Auteur Message
 Sujet du message: Optimisation du compilateur
MessagePosté: Ven 09/Sep/2011 17:30 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4311
Localisation: Clermont ferrand OU Olsztyn
Salut,

Je faisais des essais de vitesse et j'ai constater une lacune du compilateur

à savoir que :
a = b * 10 * 50 * 100
est plus lent que :
a = 10 * 50 * 100 * b

ce qui n'est pas logique.

Le compilateur arrive bien à simplifier
a = 10 * 50 * 100 * b
en regroupant les constantes en seules variable, donc à compiler directement a = 50000 * b
mais si on écrit
a = b * 10 * 50 * 100
il n'y arrive pas

Le test :
Code:
#Max = 400000000
Dim Temps(10)

Temps(1) = ElapsedMilliseconds()

For i = 1 To #Max
   Calcul.f = Radian(i * 10) + 5
Next

Temps(2) = ElapsedMilliseconds()

For i = 1 To #Max
   Calcul.f = 10 * #PI / 180 * i + 5
Next

Temps(3) = ElapsedMilliseconds()

For i = 1 To #Max
   Calcul.f =  i * 10 * #PI / 180 + 5
Next

Temps(4) = ElapsedMilliseconds()

For i = 1 To #Max
   Calcul.f =  i * (10 * #PI / 180) + 5
Next

Temps(5) = ElapsedMilliseconds()

For i = 1 To #Max
   Calcul.f = (10 * #PI / 180) * i + 5
Next

Temps(6) = ElapsedMilliseconds()

; Affichage du résultat
For  i = 2 To 6
   If i > 2
      Texte.s + Chr(10)
   EndIf
   Texte.s + Str(Temps(i) - Temps(i - 1))
   If i > 2
      If (Temps(i) - Temps(i - 1)) > (Temps(2) - Temps(1))
         Texte + " ( x " + StrD((Temps(i) - Temps(i - 1)) / (Temps(2) - Temps(1)), 2) + " )"
      Else
         Texte + " ( / " + StrD((Temps(2) - Temps(1)) / (Temps(i) - Temps(i - 1)), 2) + " )"
      EndIf
   EndIf
Next
MessageRequester("Temps", Texte)


Il en pense quoi, notre Fred nationnal ?

++

_________________
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]


Haut
 Profil  
 
 Sujet du message: Re: Optimisation du compilateur
MessagePosté: Ven 09/Sep/2011 17:38 
Hors ligne
Site Admin

Inscription: Mer 21/Jan/2004 11:03
Messages: 1904
C'est vrai, le parser agrège de gauche à droite, ca va pas etre facile à changer. C'est un cas extreme, c'est rare d'avoie des constantes qui se suivent sans mettre la valeur finale.


Haut
 Profil  
 
 Sujet du message: Re: Optimisation du compilateur
MessagePosté: Ven 09/Sep/2011 17:40 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4311
Localisation: Clermont ferrand OU Olsztyn
Je fais ça tout le temps en pensant que le compilateur regroupe les constantes qui se suive :mrgreen: c'est bien plus lisible sur des calculs mathématiques complexes d'avoir l'ensemble des constantes sans simplification.

Chose dont on avait déjà parler. Et je viens de me rendre compte que sans mettre de parenthèses, c'est pas une bonne idée :)

Avec des parenthèses, c'est bon, mais il faut y penser.

Comme ce calcul par exemple :
Code:
a = Angle * (#Angle_Resolution * 180 / #PI) + (360 * #Angle_Resolution)

Sans parenthèses, il est est bien plus lent (2 à 3 fois)

_________________
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 3 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

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


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye