[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[linux] Re: SDL + antialiasing/blur.
Merci beaucoup pour cette explication.
Cedric
On Fri, Aug 17, 2001 at 10:04:21PM +0200, Laurent Vuibert wrote:
> Cedric De Wilde wrote:
>
> >On Fri, Aug 17, 2001 at 11:53:22AM +0200, Laurent Vuibert wrote:
> >
> >>Les instructions lente en programmations sont les suivantes
> >> - les tests (if, for)
> >> - les adressages indexé ( tab[x+1] )
> >>
> >
> >Tu pourrais expliquer un peu plus tab[x+1], d'apres le peu que je connait
> >du c, ce devrait etre rapide puique c'est juste une adresse de base + le
> >déplacement, non?
> >
> >A part que x+1 est une simple addition(donc assez rapide), je ne vois
> >pas trop pq tu consideres ca comme lent.
> >
> ce que je veut dire c'est que 'tab' est un pointeur vers le premier
> élement du tableau
> le fait de demandé tab[x+1] le programme réalises les instructions suivantes
>
> 1: il charge x dans une variable apelé ici d
> 2: lecture de 1 dans e
> 3: il rajoute e a d
> 4: il rajoute la valeur de 'tab' a d
> 5: il lit la valeurs a l'adresse d
>
> Ce qui fait beaucoup d'instructions pour une commande
>
> 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'
> 2: add d et de tab dans d
> 3: lecture de la variable a l'adress d dans e
> 4: lecture de 1 dans f
> 5: add e et f dans g
> 6: idem 1
> 7: idem 2
> 9: mise de g a l'adresse d
> 10: incrémentation de i
> 11: soustraction de 1500 a i
> 12: test si la negatif alors étape 1
>
> et le code optimisée par moi:
>
> t=tab; i=1500
> do{
> *(t++)++;
> while(--i);
>
> dans la boucle
>
> 1: lecture de l'adresse t dans d
> 2: incrémentation de 1 à l'adresse t
> 3: incrémentation de l'adresse t de 1
> 4: décrementation i
> 5: si i non null alors étape 1
>
> les étape on été fait de tête, si je voulais étre rigoureux, il
> aurait falut que je compile le code et que je regarde le code en
> assembleur qui en résulte
> les incrémentation et décrementation de 1 du stile "i++, --i" sont trés
> rapide.
>
> De plus en assembleur (tout programme ecrit en c est d'abord transcrit
> en assembleur puis en langage machine) les instructions sont plus ou
> moin rapide
> l'unité de temps es le cycle d'horloge t=1/f (f=fréquence du processeur)
> un incrementation de 1 peut prendre 1 cycle d'horloge alors que de
> l'adressage indexé (ex tab[8]) peut en prendre plus de 6
>
> c'est temps différre d'un model de processeur à un autre:
>
>
> Si cela peut ouvrir vos l'enternes :-)
>
>
>
>
> [ Soyez précis dans vos sujets svp afin de déterminer directement ]
> [ le type de demande... ]
> [ Pour vous (dés)inscrire, aller sur http://unixtech.be/ml.php ]
> [ Archives de la mailing list: http://archives.unixtech.be/linux/ ]
> [ http://unixtech.be Contact: listmaster@unixtech.be ]
[ Soyez précis dans vos sujets svp afin de déterminer directement ]
[ le type de demande... ]
[ Pour vous (dés)inscrire, aller sur http://unixtech.be/ml.php ]
[ Archives de la mailing list: http://archives.unixtech.be/linux/ ]
[ http://unixtech.be Contact: listmaster@unixtech.be ]