Optimisation du compilateur

Sujets variés concernant le développement en PureBasic
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Optimisation du compilateur

Message par Le Soldat Inconnu »

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 : Tout sélectionner

#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)]
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Re: Optimisation du compilateur

Message par Fred »

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.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Optimisation du compilateur

Message par Le Soldat Inconnu »

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 : Tout sélectionner

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)]
Répondre