[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[linux] Re: SDL + antialiasing/blur.
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
dash@linuxbe.org
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)"