OVH Cloud OVH Cloud

Améliorer la vitesse ?

43 réponses
Avatar
ByB
Bonjour,

Je suis curieux de savoir si en remplaçant deux boucles imbriquées :

for (int i = 0;i<8;i++)
{

for (int j=0;j<8;j++)
{
FaireQuelqueChose(i,j);

}

}

par une seule boucle :

int i,j;
for (int x = 0;x<64;x++)
{

i = x % 8;
j = x/8;

FaireQuelqueChose(i,j);

}

je gagne quelque chose (en particulier en vitesse d'exécution du
programme) ou si cela ne change rien ?

Merci.


--
Ladra que muerde no perra. (Chespirito)

3 réponses

1 2 3 4 5
Avatar
Alain Gaillard


Si X est connu à la compilation, un bon compilateur mettrait le résultat
de 7*X directement au lieu d'optimiser la multiplication...



Tout à fait et autant pour moi.
Je dois dire que c'était il y a longtemps et je ne me rappelle plus le
code. Mais par contre je suis sûr du 7X = 8X-X.


--
Alain

Avatar
Cyrille


Si X est connu à la compilation, un bon compilateur mettrait le
résultat de 7*X directement au lieu d'optimiser la multiplication...



Tout à fait et autant pour moi.
Je dois dire que c'était il y a longtemps et je ne me rappelle plus le
code. Mais par contre je suis sûr du 7X = 8X-X.


Je vous crois, d'autant que je viens de regarder et VC++ 2005 fait
exactement ça pour 7*X (X étant un int):

00401004 lea eax,[ecx*8]
0040100B sub eax,ecx

Pour les histoires de débordements, je crois que simplement, 8*X peut
déborder certes, mais que dans ce cas la soustraction par X déborde dans
l'autre sens, et on retombe sur nos pieds.

--
C'est ma signature qu'elle est la mieux. Pas la vôtre.


Avatar
Sylvain
Ploc wrote on 30/07/2006 15:46:

Plus generalement, je serais assez interesse par un bench relatif aux
divisions...


<jeux de plage>

0.015 ms pour une division entière de 1024 bits par 128 bits.

</jeux de plage>

Sylvain.

1 2 3 4 5