30

ps...
tu parlessmile
l'optimisation n'existe passmile
c'est comme x+=1; x=x+1; et x++; le code généré sera addq #1,dx.. (je pense..)
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

31

> ps...
> tu parles
> l'optimisation n'existe pas
> c'est comme x+=1; x=x+1; et x++; le code généré sera addq #1,dx.. (je pense..)
Eh ben non smile pour les exemples que tu as donné, le code généré sera effectivement addq #1,dx, mais pour la boucle for c différent puisque les 2 instructions n'ont pas le même rôle :

for (i=n; i; i--) :
 move.w n,d0
 beq quit
loop
 subq.w #1,d0
 ... code de la boucle ...
 tst.w d0
 bne loop


for (i=n; i--; ) :
 move.w n,d0
| subq.w #1,d0
| bcc quit
 (ou bien beq quit si le compilo optimise bien)
loop
 ... code de la boucle ...
 dbf d0,loop



Et le code sera meilleur dans le 2è cas (gain de 8 cycles par boucle + 2/4 octets dans le progs)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

32

si je comprend bien:
for (i=n; i; i--) : <=> for (i=n; --iwink ?

c'est bisard car le premier pourais etre optimiser par un dbf...
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

33

Dans le premier cas, tu ne décrémentes i que si i est non nul; dans ma méthode (for (i=n; i--; )) tu décrémentes toujours i, et à moins que le compilo soit intelligent, il va générer un code moins bon dans le premier cas (pas de dbf)

et c pas :
for (i=n; i; i--) : <=> for (i=n; --i; )
mais :
for (i=n; i; i--) : <=> for (i=n; i--; )

Le premier cas finit à i=1, tandis que le 2è finit à i=0 (c ce qu'on veut)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

34

Arf..je voulais dire au niveau optimisation...
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

35

eh non, --i empêche de faire des dbf (il faut faire subq.w #1,d0/bne loop plutôt que dbf d0,loop)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

36

oui donc au niveau opti: for (i=n; i; i--) : <=> for (i=n; --i :=
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

37

non, la 1è boucle est encore pire que la 2è smile

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

38

Ouia bon le c ca sux un max smile
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

39

mais non, c tout simple wink

c sûr qu'à moins d'avoir fait un compilo C ou de regarder les différentes méthodes en comparant le code généré, on peut pas vraiment savoir comment optimiser en C, mais bon la seule grosse optimisation est de pas faire de for (i=0;i<n;i++)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

40

Et avec VC++ 6 ? c'est quoi le must ? smile
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

41

je suis pas un spécialiste de l'optimisation VC++, mais il m'avait semblé qu'il optimisait tout très bien smile (j'avais vraiment été impressionné quand j'avais vu la qualité du code généré avec un source pas du tout optimisé, style il est capable d'utiliser (a0)+ quand tu lui demandes de faire for (i=0;i<n;i++) printf("%d",tab[i]), et ensuite comme i est plus utilisé il te le transforme en for (i=n;i--; ) top)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

42

Mais alors pourquoi Win est il aussi merdiq smile
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

43

pke y'a plein plein de choses roll

44

Windows est lent parcequ'il est compilé pour 386+coprocesseur, il n'utilise aucune instruction des processeurs supérieurs.
C'est tout à fait voulu de M$ : ça leur permet de faire tourner leur OS sur un max de machines... donc de monopoliser au max.

Pollux : dis-donc, VC++ serait alors plus performant que GCC ?
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

45

c'est ridicule.. qui veux faire tourné XP sur un px de merde smile
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

46

C'est à Billou qu'il faut dire ça.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

47

C'est l'avantage de l'open source.. permet de compiler son os avec les meilleurs optimisations..
XLib v1.00 Powerrrrrrrrrrrrrrrrrrrr!

48

Thibaut> c possible, mais y a peut-être aussi des différences entre GCC 68k et GCC x86 (en tout cas ce serait pas étonnant qu'une usine à gaz faite par des pros comme VC++ soit mieux foutue qu'un truc fait par des bénévoles)

Et je sais pas si ils optimisent pour 386 ou pour Pentium : même s'il y a des instructions communes, les temps d'exécution ne sont pas les mêmes, et je pense que WinXP n'est pas optimisé pour 386 (quoique c pas sûr mais bon smile)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

49

Comment voulez-vous comparer GCC et VS si vous ne regardez pas le même processeur dans les 2 cas ??

Paraît que GCC est plus performant quand il s'agit de générer du code x86.


Tiens, Pollux a répondu avant moi wink

50

Pollux : je ne parlais pas d'optimisation, mais de jeu d'instructions.
Il génèrent un code 386+coproc mais optimisent pour les derniers processeurs.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

51

JM> GCC x86 plus performant que le compilo de VS confus

52

> Paraît que GCC est plus performant quand il s'agit de générer du code x86
Ca me paraît qd même bizarre puisque les trucs du style [i]for (i=0;i<n;i++) printf("%d",tab) sont des optimisations indépendantes de la plate-forme, puisque les plate-formes à la fois sans mode postincrement et qui ont des multiplications plus rapide que les additions, ça doit pas courir les rues wink

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

53

de tt facon, VS utilise le compilo intel il me semble ... qui est un excellent compilo roll

54

Pollux
a écrit : Et par pitié pour GTC ne faites pas i=nbre_perso; i--; parce que GTC n'optimise pas les expressions séparées (because ça ralentirait énormément)

Vive GCC! tongue
Pollux a écrit :
mais en tout cas le seul compilo que je connaisse qui fasse ça est Visual C++ (et puis si tu fais une boucle style for (i=0;i<n;i++) func(tab[i]), il remplace tab[i] par *p++ top)

Et puis la plupart des programmeurs qui utilisent for utilisent aussi tab[i] plutôt que *p++, donc ça peut pas être optimisé par le compilo sad

Avec GCC 3.1 (j'ai testé avec: GCC.EXE (GCC) 3.1.1-tigcc-1):
#define USE_TI89
#include <tigcclib.h>

char tab[100];

void _main(void)
{
int i,n=100;
char *p=tab;
for (i=0;i<n;i++) printf("%d",p[[b][/b]i]);
}

donne:
	clr.w %d3
	lea tab,%a2
	.even
.L6:
	move.b (%a2)+,%d1
	ext.w %d1
	move.w %d1,-(%sp)
	pea .LC0
	jbsr printf
	addq.l #6,%sp
	addq.w #1,%d3
	cmp.w #100,%d3
	jblt .L6

Ce n'est pas l'idéal (i n'est pas éliminé), mais l'optimisation est faite. Mais si on n'utilise pas p, mais directement tab, ce n'est pas le cas.
nEUrOne a écrit :
de tt facon, VS utilise le compilo intel il me semble ... qui est un excellent compilo roll

Faux. On peut utiliser le compilateur Intel avec Visual Studio, mais le compilateur livré avec Visual Studio n'est pas celui d'Intel (mais VC++, développé par M$ eux-mêmes).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité