Hello !
On Fri, Aug 17, 2001 at 10:04:21PM +0200, Laurent Vuibert wrote:
[.../...]
> ex le mauvait code suivant:
>
> if(i=0; i<1500; i++)
> {
> tab[i]=tab[i]+1;
> }
>
> dans la boucle il se passe :
>
> 1: lecture de i dans 'd'
[.../...]
> 12: test si la negatif alors �tape 1
Hum, hum, tu es s�r que ton compilateur n'est pas un peu trop vieux ?
> et le code optimis�e par moi:
>
> t=tab; i=1500
> do{
> *(t++)++;
> while(--i);
>
> dans la boucle
�a me semble devenir bien compliqu�, et ce pour un gain n�gligeable. En
effet (et surtout dans le cas du tra�tement d'images, o� on manipule
beaucoup de donn�es d'un coup), tes tracas seront bien plus souvent dus
� la bande passante de ta m�moire qu'au nombre de cycles utilis�s par
ton processeur ...
De plus, si l'on passe les deux dans gcc avec des options � standard �,
(gcc -Wall -S -O2 foo.c) on s'aper�oit qu'il g�n�re le m�me nombre
d'instructions (et qui s'ex�cutent dans les m�mes temps sur un
processeur r�cent) pour le � mauvais � code et le code � optimis� �
(voir les deux fichiers attach�s).
"Premature optimization is the root of all evil."
-- Donald Knuth
[.../...]
Cu,
Dash.
--
Free Dmitry Sklyarov !
http://www.freesklyarov.org/
--
Damien Diederen
[EMAIL PROTECTED]
http://users.swing.be/diederen/
#include <stdio.h>
extern void __________ (void);
int main ()
{
int tab [4000];
int i;
int *t = tab;
__________ ();
for (i=0; i<1500; i++) {
tab[i]=tab[i]+1;
}
__________ ();
i=1500;
do {
(*(t++))++;
} while(--i);
__________ ();
return 0;
}
.file "foo.c"
.version "01.01"
gcc2_compiled.:
.text
.align 4
.globl main
.type main,@function
main:
pushl %ebp
movl %esp,%ebp
subl $16016,%esp
pushl %esi
pushl %ebx
leal -16000(%ebp),%ebx
call __________
movl %ebx,%edx
xorl %eax,%eax
movl $1499,%esi
.p2align 4,,7
.L21:
incl (%edx,%eax)
addl $4,%eax
decl %esi
jns .L21
call __________
movl $1500,%esi
.p2align 4,,7
.L26:
incl (%ebx)
addl $4,%ebx
decl %esi
jnz .L26
call __________
xorl %eax,%eax
popl %ebx
popl %esi
movl %ebp,%esp
popl %ebp
ret
.Lfe1:
.size main,.Lfe1-main
.ident "GCC: (GNU) 2.95 19990728 (release)"