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