Page 1 sur 1

Ecx lent

Publié : dim. 23/sept./2012 18:35
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))

Re: Ecx lent

Publié : dim. 23/sept./2012 22:56
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+

Re: Ecx lent

Publié : lun. 24/sept./2012 2:52
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 ?

Re: Ecx lent

Publié : lun. 24/sept./2012 11:53
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.

Re: Ecx lent

Publié : lun. 05/nov./2012 23:34
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)

Re: Ecx lent

Publié : sam. 15/nov./2014 13:17
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)

Re: Ecx lent

Publié : sam. 15/nov./2014 13:57
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 :?