[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[linux] Re: SDL + antialiasing/blur.



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 ]