[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  ]