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)"

Répondre à