Ecx lent

Pour discuter de l'assembleur
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Ecx lent

Message par SPH »

Ca alors, le 4eme code tres court met + de temps que les autres codes... Pkoi ?

Code : Tout sélectionner

i.l
a.l
x.l
temps.l=ElapsedMilliseconds()

; x=5
 ! MOV    dword [v_x],5
; for i=1 to 100000000 step 1
!  MOV    dword [v_i],1
!_For1:
!  MOV    eax,100000000
!  CMP    eax,dword [v_i]
!  JL    _Next2
; a=1
!  MOV    dword [v_a],1
; Next
!_NextContinue2:
!  INC    dword [v_i]
!  JNO   _For1
!_Next2:
MessageRequester("ms",str(ElapsedMilliseconds()-temps))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
temps.l=ElapsedMilliseconds()

; x=5
 ! MOV    dword [v_x],5
; for i=1 to 100000000 step 1
!  MOV    ebx,1
!_For1x:
!  MOV    eax,100000000
!  CMP    eax,ebx
!  JL    _Next2x
; a=1
!  MOV    dword [v_a],1
; Next
!_NextContinue2x:
!  INC    ebx
!  JNO   _For1x
!_Next2x:
MessageRequester("ms",str(ElapsedMilliseconds()-temps))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
temps.l=ElapsedMilliseconds()

; x=5
 ! MOV    dword [v_x],5
; for i=1 to 100000000 step 1
!  MOV    ebx,1
!  MOV    eax,100000000
!_For1xx:
!  CMP    eax,ebx
!  JL    _Next2xx
; a=1
!  MOV    dword [v_a],1
; Next
!_NextContinue2xx:
!  INC    ebx
!  JNO   _For1xx
;!loop _For1xx
!_Next2xx:
MessageRequester("ms",str(ElapsedMilliseconds()-temps))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
temps.l=ElapsedMilliseconds()

; x=5
 ! MOV    dword [v_x],5
; for i=1 to 100000000 step 1
!  MOV    ecx,100000000
!_For1xxx:
; a=1
!  MOV    dword [v_a],1
; Next
!  Loop _For1xxx
MessageRequester("ms",str(ElapsedMilliseconds()-temps))
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: Ecx lent

Message par PAPIPP »

Bonjour SPH
Avec ce prg c'est le premier qui est le plus long.

Code : Tout sélectionner

i.l
a.l
x.l
resultat$=""
temps.l=ElapsedMilliseconds()

; x=5
! MOV dword [v_x],5
; for i=1 to 100000000 step 1
! MOV dword [v_i],1
!_For1:
! MOV eax,100000000
! CMP eax,dword [v_i]
! JL _Next2
; a=1
! MOV dword [v_a],1
; Next
!_NextContinue2:
! INC dword [v_i]
! JNO _For1
!_Next2:
RESULTAT$+Str(ElapsedMilliseconds()-temps)+#CRLF$

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
temps.l=ElapsedMilliseconds()

; x=5
! MOV dword [v_x],5
; for i=1 to 100000000 step 1
! MOV ebx,1
!_For1x:
! MOV eax,100000000
! CMP eax,ebx
! JL _Next2x
; a=1
! MOV dword [v_a],1
; Next
!_NextContinue2x:
! INC ebx
! JNO _For1x
!_Next2x:
RESULTAT$+Str(ElapsedMilliseconds()-temps)+#CRLF$
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
temps.l=ElapsedMilliseconds()

; x=5
! MOV dword [v_x],5
; for i=1 to 100000000 step 1
! MOV ebx,1
! MOV eax,100000000
!_For1xx:
! CMP eax,ebx
! JL _Next2xx
; a=1
! MOV dword [v_a],1
; Next
!_NextContinue2xx:
! INC ebx
! JNO _For1xx
;!loop _For1xx
!_Next2xx:
RESULTAT$+Str(ElapsedMilliseconds()-temps)+#CRLF$
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
temps.l=ElapsedMilliseconds()

; x=5
! MOV dword [v_x],5
; for i=1 to 100000000 step 1
! MOV ecx,100000000
!_For1xxx:
; a=1
! MOV dword [v_a],1
; Next
! Loop _For1xxx
RESULTAT$+Str(ElapsedMilliseconds()-temps)+#CRLF$

MessageRequester("ms",resultat$)
A+
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Ecx lent

Message par SPH »

PAPIPP a écrit :Bonjour SPH
Avec ce prg c'est le premier qui est le plus long.
Le premier, c'est le programme generé par PB. Il est lent. Apres quelques transformation, je me suis dit que utiliser Ecx en compteur, ce serait le top. Et bien non, c'est presque aussi lent que le code pb.
Ma question est : pourquoi ?
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Fred
Site Admin
Messages : 2648
Inscription : mer. 21/janv./2004 11:03

Re: Ecx lent

Message par Fred »

Parce que un acces memoire d'une donnée deja dans la ligne de cache L1 du processeur est quasiment gratuite, et que les instructions de branchement prennent de toute facon la plupart du temps dans ton code.
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Ecx lent

Message par Fig »

loop est plus lent que dec et jl.

Sinon, désactive l'option du compilateur "activer la gestion des threads" tu pourrais être surpris... (d'une façon général si tu n'utilise pas les thread tu gagnes de la vitesse dans tes progs: c'est assez significatif)
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
RoseGul
Messages : 1
Inscription : sam. 15/nov./2014 13:09

Re: Ecx lent

Message par RoseGul »

L’exemple ci-dessous permet de voir les bits d’une variable
Et de mettre les bits à 1 dans un tableau de position .
(Histoire d’étudier le stockage en matrice binaire 0/1)
Cut down your exam TK0-201 by using our latest wikipedia and high quality California Institute of Technology gmat and VMWARE We provide updated exam sheets with 100% pass guarantee along with CHECKPOINT
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

Re: Ecx lent

Message par Lord Nelson »

RoseGul a écrit :L’exemple ci-dessous permet de voir les bits d’une variable
Et de mettre les bits à 1 dans un tableau de position .
(Histoire d’étudier le stockage en matrice binaire 0/1)
???

Tu veux dire quoi par là ?
Je vois pas de code en plus :?
Répondre