Code Asm plus lent que le C !!!
Bonjour,
Je viens de me metre tres recement à l'assembleur, bien que je ne doute pas des capacité de celui-ci, voici mon probleme.
J'ai testé mon code dans Visual Studio 2005, voici mes 2 fonctions :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| void ASMbuff8to32(BYTE* in, BYTE* out, int imgSize)
{
__asm
{
mov ecx, imgSize //Stock la taille de l'image
mov eax, in //pointe sur l'image d'entree
mov ebx, out //pointe sur l'image de sortie
label:
mov dl, byte ptr [eax]//recupere le BYTE de l'image d'entree
mov byte ptr [ebx], dl //copie le 3 fois dans l'image de sortie
mov byte ptr [ebx+1], dl
mov byte ptr [ebx+2], dl
add ebx,3 //avance de 3 sur l'image de sortie
inc eax //avence d'un sur l'image d'entree
//decremente le compteur
loop label //boucle tant que ecx > 0
}
}
void buff8to32(BYTE* in, BYTE* out, int imgSize)
{
while ( imgSize >= 0 )
{
*out = *in;
out++;
*out = *in;
out++;
*out = *in;
out++;
in++;
imgSize--;
}
} |
Et lorsque je teste la rapidité d'execution, mon code ASM est plus lent que mon code C ! (Mode Release avec optimisation standard )
En regardant en mode debugage de VS, je remarque de le code ASM généré par ma function C est bien plus long et à l'air d'etre bien mois optimisé!
Je sais que l'integration de code Asm dans un langage C, n'est pas la façon la plus rapide d'execution, mais c'est quand meme bien étrange ?
Si vous avez le moindre soupçon, de savoir d'ou cela peu provenir, merci de bien vouloir eclairer ma lumiere dans ce sombre couloir... je suis completement désassemblé
:D
Re: Code Asm plus lent que le C !!!
Remplace, ton loop par dec ecx | jnz label, tu gagneras déjà un peu. :wink:
Citation:
Envoyé par mabu
De plus, les processeurs ont aujourd'hui des jeux d'instructions spéciales comme MMX, sse qui bien utilisées font des programmes plus rapides. Et les compilateur savent utiliser ces instructions à bon escient.
Je ne suis pas sûr que à bon escient soit le mot... ^^
Enfin de toute façon ici, c'est n'est pas l'idéal pour utiliser des instructions mmx.