Est-ce que vous pourriez tester ce code: il affiche 3 durées.
N°1 : optimisation n°1
N°2: code normal
N°3: optimisation n°2
Et sur les ordinateurs que j'ai utilisé, le N°3 fonctionne nickel (c'est le plus rapide). Pourtant le PC de Michael Vogel fait office d'exception: l'optimisation 3 ne fonctionne pas, elle est plus lente que la normale! J'aimerais savoir s'il y en a d'autres. ça me permettrait de comprendre pourquoi certaines configurations "freinent".
Merci!
Code : Tout sélectionner
DisableDebugger
timeBeginPeriod_(1)
Macro ExecutionIfTrue()
; Nothing
EndMacro
Macro ExecutionIfFalse()
; Nothing
EndMacro
Macro Test1()
If A
If B
ExecutionIfTrue()
Else
ExecutionIfFalse()
EndIf
Else
ExecutionIfFalse()
EndIf
EndMacro
Macro Test2()
If A And B
ExecutionIfTrue()
Else
ExecutionIfFalse()
EndIf
EndMacro
Macro Test3() ; (= If A And B) /!\ /!\ /!\ /!\ /!\
! xor eax, eax
! lea edi, [v_A]
! scasd
! je l_isfalse2
! lea edi, [v_B]
! scasd
! je l_isfalse2
IsTrue2:
ExecutionIfTrue()
! jmp l_endif2
IsFalse2:
ExecutionIfFalse()
EndIf2:
EndMacro ; \!/ \!/ \!/ \!/ \!/
Macro Counter(InternalMacro)
Cumul = 0
For A = 0 To 1
For B = 0 To 1
InternalMacro
Next
Next
EndMacro
Define Test1.I
Define Test2.I
Define Test3.I
Define ValeurIni.I
Define ValeurFin.I
Define Cumul.I
Define A.I = 0
Define B.I = 0
Define TotalTest.I = 10000000
ValeurIni=timeGetTime_()
For I = 1 To TotalTest
Counter(Test1() )
Next
ValeurFin=timeGetTime_()
Test1=ValeurFin-ValeurIni
ValeurIni=timeGetTime_()
For I = 1 To TotalTest
Counter(Test2() )
Next
ValeurFin=timeGetTime_()
Test2=ValeurFin-ValeurIni
ValeurIni=timeGetTime_()
For I = 1 To TotalTest
Counter(Test3() )
Next
ValeurFin=timeGetTime_()
Test3=ValeurFin-ValeurIni
MessageRequester("Tests without debugger", "Test #1 (If a If b) = " + Str(Test1) + " ms" + Chr(10) + "Test #2 (If a And b) = " + Str(Test2) + " ms" + Chr(10) + "Test #3 (Asm /!\ with LEA) = " + Str(Test3) + " ms")
timeEndPeriod_(1)