Moi je vous dirais que je n'arrive pas à avoir un test fiable. Malgré les temps repos avant de commencer les tests c'est toujours le premier test qui est perdant quelque soit l'algo.!!! Ceci dit je suis étonné par la vitesse avec laquelle il s'occupe de la pile...
Code : Tout sélectionner
Define A.I
Define B.I
Define C.I
Define D.I
Define E.I
inter = 1
OpenWindow(0, 0, 0, 400, 200, "Question")
TextGadget(0, 16, 16, 350, 20, "Choose a test order:")
ButtonGadget(1, 16, 64, 350, 24, "First test = normal, second test = add stack statements")
ButtonGadget(2, 16, 112, 350, 24, "First test = add stack statements, second test = normal")
TextGadget(3, 16, 160, 350, 20, "(Test results will be displayed in the console screen)")
Repeat
EventID = WaitWindowEvent()
Select EventGadget()
Case 1
inter = 0
Goto Continu
Case 2
inter = 1
Goto Continu
EndSelect
Until EventID = 16
CloseWindow(0)
End
Continu:
CloseWindow(0)
Delay(500)
Global Dim Duree.I(5, 2)
Max = 1 ; <<<<<<<<<<<<<<<<<<< NOMBRE DE TEST (ATTENTION!)
; Pas trop quand même!!!
*XX = AllocateMemory(1 << 24)
For I = 1 To Max
MessageRequester("", "Test " + Str(I) + "/" + Str(Max) )
Delay(500)
Total = 1
For J = 1 To I
Total * 10
Next J
If inter: Goto b: EndIf
a:
T0.I = ElapsedMilliseconds()
For vv = 0 To Total
For A = 0 To 10
For B = 0 To 10
For C = 0 To 10
For D = 0 To 10
For E = 0 To 10
PokeB(*XX + Random(1 << 24 - 1), PeekB(*XX + Random(1 << 24 - 1) ) )
Next
Next
Next
Next
Next
Next vv
T1.I = ElapsedMilliseconds()
Valeur1.I = T1 - T0
If inter: Goto c: EndIf
b:
T2.I = ElapsedMilliseconds()
For vv = 0 To Total
! push [v_A] ; On sauvegarde A dans la pile
For A = 0 To 10
! push [v_B] ; On sauvegarde B dans la pile
For B = 0 To 10
! push [v_C] ; On sauvegarde C dans la pile
For C = 0 To 10
! push [v_D] ; On sauvegarde D dans la pile
For D = 0 To 10
! push [v_E] ; On sauvegarde E dans la pile
For E = 0 To 10
PokeB(*XX + Random(1 << 24 - 1), PeekB(*XX + Random(1 << 24 - 1) ) )
Next
! pop [v_E] ; On récupère E dans la pile
Next
! pop [v_D] ; On récupère D dans la pile
Next
! pop [v_C] ; On récupère C dans la pile
Next
! pop [v_B] ; On récupère B dans la pile
Next
! pop [v_A] ; On récupère A dans la pile
Next vv
T3.I = ElapsedMilliseconds()
Valeur2.I = T3 - T2
If inter: Goto a: EndIf
c:
Duree(I, 0) = Total
Duree(I, 1) = Valeur1
Duree(I, 2) = Valeur2
Next
OpenConsole()
PrintN("N REP NORM STACK DELTA")
For I = 1 To Max
Print(RSet(Str(Duree(I, 0) ), 6, "0") + " ")
Print(RSet(Str(Duree(I, 1) ), 6, "0") + " ")
Print(RSet(Str(Duree(I, 2) ), 6, "0") + " ")
n = - ((Duree(I, 2) - Duree(I, 1) ) * 100 ) / Duree(I, 1)
PrintN(RSet(Str(Int(n) ), 5, " ") + "%")
Next
PrintN(" ")
PrintN("N REP = Number of repetition")
PrintN("NORM = (DURATION) NORMAL FOR...NEXT LOOP (MS)")
PrintN("STACK = (DURATION) FOR...NEXT LOOP WITH PUSH AND POP STATEMENTS (MS)")
PrintN("DELTA = PERCENTAGE OF TIME EVOLUTION BETWEEN THE FIRST AND THE 2ND TEST")
PrintN("Press [Enter] to quit...")
Input()
CloseConsole()