Page 2 sur 2
Re: Questions Options du compilateur...
Publié : jeu. 28/sept./2023 8:25
par Mesa
Les traductions sont mises à jour mais elles ne seront effectives que lors de la prochaine release final dans quelques jours probablement.
J'ai appris que l'optimisation se faisait aussi sur l'asm, voir ici
https://www.purebasic.fr/english/viewto ... 04f1038b09
L'optimisation du C est censé prendre plus de temps, ce qui peut être gênant quand on debug et que l'on compile toutes les 10 secondes, c'est pourquoi il y a une option pour activer cette optimisation que quand on en a besoin.
M.
Re: Questions Options du compilateur...
Publié : jeu. 28/sept./2023 13:00
par Ollivier
Bonjour mesa,
l'optimisation ASM existe, mais elle n'est pas significative, comparée aux décisions automatisées durant une optimisation C (d'où un temps de compilation plus long si l'option d'optimisation en C est choisie dans les options de compilation).
mesa a écrit :Les traductions sont mises à jour mais elles ne seront effectives que lors de la prochaine release final dans quelques jours probablement.
Merci beaucoup pour le temps consacré.
Re: Questions Options du compilateur...
Publié : ven. 29/sept./2023 23:53
par cage
Bonsoir,
Merci Ollivier pour avoir parlé de ton parcours, ça permet de mieux comprendre les personnes avec qui on échange.
C'est d'autant plus important que ce forum manque un peu de vie depuis l’arrêt du Hors sujet
Heureusement certains d'entre vous n'hésitent pas a répondre quand on pose une question et j'apprécie vraiment.
cage
Re: Questions Options du compilateur...
Publié : sam. 30/sept./2023 12:42
par Fred
L'optimiseur est aussi disponible sur la version ASM du compilateur, donc il faut cocher la case si vous faites une version release de votre programme.
Re: Questions Options du compilateur...
Publié : dim. 01/oct./2023 13:12
par cage
Bonjour,
Merci Fred.
cage
Re: Questions Options du compilateur...
Publié : mar. 03/oct./2023 23:23
par Ollivier
Chose importante aussi, pour comparer des chronométries d'exécution : mettez un
Delay(16) au départ.
Code : Tout sélectionner
Delay(16)
t1 = ElapsedMilliseconds()
; routine à chronométrer
t2 = ElapsedMilliseconds()
Sinon, vous vous retrouvez avec des conclusions qui vous font penser que la version 5.50 x64 est plus rapide que les versions 6 et ultérieures, même avec l'option d'optimisation activée. Et ça, c'est un peu ballot...
Le code suivant stocke le premiers millions de nombres premiers dans le tableau
Prime.i().
Quelques résultats sur mon piètre matériel :
Code : Tout sélectionner
2642ms V5.50 X64 (ASM classique)
2580ms V6.00 X64 ASM normal
2656ms V6.00 X64 ASM optimisé
2532ms V6.00 X64 C normal
2158ms V6.00 X64 C optimisé
À vous de juger !
Code : Tout sélectionner
Delay(16)
tInitial = ElapsedMilliseconds()
sievePageSize = 1 << 16
primeListSize = 1 << 20
sievePageLimit = sievePageSize - 1
primeListLimit = primeListSize - 1
Global Dim sievePage.i(sievePageLimit)
Global Dim prime.i(primeListLimit)
Global Dim primeSieve.i(primeListLimit)
natural = 2
primeLast = 0
sievePageOffset = 0
Repeat
Repeat
If sievePage(natural - sievePageOffset) = 0
primeLast + 1
If primeLast > primeListLimit
primeLast - 1
Break 2
EndIf
prime(primeLast) = natural
sieve = natural * natural
While sieve =< sievePageLimit
sievePage(sieve - sievePageOffset) = 1
sieve + natural
Wend
primeSieve(primeLast) = sieve
EndIf
natural + 1
Until (natural - sievePageOffset) > sievePageLimit
sievePageOffset + sievePageSize
For i = 0 To sievePageLimit
sievePage(i) = 0
Next
For i = 1 To primeLast
j = (primeSieve(i) - sievePageOffset)
While j =< sievePageLimit
If j < 0
Break
EndIf
sievePage(j) = 1
j + prime(i)
Wend
primeSieve(i) = j + sievePageOffset
Next
ForEver
tFinal = ElapsedMilliseconds()
For i = 1 To primeLast
ratio.d = i / prime(i)
;Debug Str(i) + ": " + Str(prime(i) ) + Chr(9) + StrD(ratio)
Next
MessageRequester("#" + Str(primeLast) + " : " + Str(prime(primeLast) ), Str(tFinal - tInitial) )