Resultat de la vitesse des : Registre, instruction, calcul, et mémoire ! ! !
rebixav
Messages postés130Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention28 janvier 2013
-
6 mai 2012 à 21:54
rebixav
Messages postés130Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention28 janvier 2013
-
10 mai 2012 à 21:39
asm : ( push/pop ) = 0.14 alors que [esp]=0.13 ou 0.68 celon l'emplacment ESP ?!!
ecrire mov [ESP],eax est plus lent que push eax, alors que là il y a en plus un sub esp,4 ?
c'est pas logique mais réelle, j'ai testé plusieurs fois ??!
asm : ( cmp ) = 0.08
asm : ( je oui ) = 0.26
asm : ( je non ) = 0.07
asm : ( jb non ) = 0.06
asm : ( cmp + je non ) = 0.15
asm : ( cmp + jb non ) = 0.14
asm : ( jmp ) = 0.30
la conclusion à cela c'est qu'un branchement sur ligne est lent !
différence de vitesse par registre grace à plusieurs "mov" :
asm : ( eax ) = 0.13
asm : ( ebx ) = 0.13
asm : ( ecx ) = 0.13
asm : ( edx ) = 0.13
asm : ( esi ) = 0.13
asm : ( edi ) = 0.14 ??!! un peu plus lent on dirait !
asm : ( esp ) = 0.13
asm : ( eax2 ) = 0,29 donc [esp]
asm : ( eax2 ) = 1,20 donc [esp] si on fait un calcul !!!!!
tout les resultats on était fait et refait
avec des 200 000 000 million de répétition à chacun !
...
Par contre comme vous pouvez le voir il y a un hic ! ! !
selon la position esp mes variable sont plus ou moins rapide avec des ecart enorme !
exemple :
sub esp,18
mov eax,32 : mov [ESP],eax : mov ebx,[ESP]
mov eax,32 : mov [ESP],eax : mov ebx,[ESP]
mov eax,32 : mov [ESP],eax : mov ebx,[ESP]
mov eax,32 : mov [ESP],eax : mov ebx,[ESP]
add esp,18
dans ma boucle donne le résultat de 0.13 Seconde
alors que :
sub esp,8
mov eax,32 : mov [ESP],eax : mov ebx,[ESP]
mov eax,32 : mov [ESP],eax : mov ebx,[ESP]
mov eax,32 : mov [ESP],eax : mov ebx,[ESP]
mov eax,32 : mov [ESP],eax : mov ebx,[ESP]
add esp,8
donne 1,33 secondes
même avec sub esp,100 ou 88, ou 50 ??!
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 8 mai 2012 à 22:39
Une serie d'instructions se mesure en ticks avec RDTSC, autrement n'amène qu'à du grand nimporte quoi.
mov [ESP], eax
ou
mov [ESP + xxx], eax
doit s'exécuter exactement pareil, seule la longueur (encodage) de l'instruction change. L'offset sur adresse est déjà résolu par le prefetch (chargeur d'instructions) avant d'arriver à l'unité d'exécution.
Les perfs dépendent beaucoup plus, à algo identique, au bon alignement des instructions et leur entrelacement (éviter les 'stall') qu'aux instructions elles memes.
rebixav
Messages postés130Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention28 janvier 2013 10 mai 2012 à 21:39
D’après ce que je comprend, "RDTSC" est une fonction trés pécise pour calculé le temps d'une fonction !
mais là c'est une boucle de plusieurs millons qui fait 1,33 secondes au lieu de 0.13 Secondes, je l'ai encore refait hier je veut dire que là pas besoin de d'avoir un super chronomètre pour ce rendre compte qu'il y a quelque chose (mais je ne sais pas quoi ?)