Page 1 sur 2

Boucle For et calcul dans la plage

Publié : sam. 08/août/2009 12:24
par Le Soldat Inconnu
Salut,

Voilà, juste un petit test sur les boucles pour certains sceptiques.

J'ai entendu parfois que faire un calcul dans le For était plus lent

Comme cela par exemple

Code : Tout sélectionner

For Index = 1 To x * y * z
qui serait plus lent que

Code : Tout sélectionner

For Index = 1 To x
Erix14 a épluché le code ASM généré par PB et le calcul est fait à chaque tour de boucle.

Code : Tout sélectionner

x = 1614
y = 125
z = 1.78

xyz = x * y * z

Temps1 = ElapsedMilliseconds()

For n = 1 To 10000
  For Index = 1 To x * y * z
    Operation + 1
  Next
Next

Temps2 = ElapsedMilliseconds()

For n = 1 To 10000
  For Index = 1 To xyz
    Operation + 1
  Next
Next

Temps3 = ElapsedMilliseconds()

MessageRequester("Temps", "For x * y * z = " + Str(Temps2 - Temps1) + #CR$ + "For xyz = " + Str(Temps3 - Temps2))

Publié : sam. 08/août/2009 15:58
par Ollivier
J'ai corrigé ton code qui avait une toute petite paire d'erreurs située dans le MessageRequester().

Code : Tout sélectionner

DisableDebugger ; j'ai rajouté aussi celui-là...

x = 1615
y = 125
z = 1.78

xyz = x * y * z

Temps1 = ElapsedMilliseconds()

For n = 1 To 1000
  For Index = 1 To x * y * z
    Operation + 1
  Next
Next

Temps2 = ElapsedMilliseconds()

For n = 1 To 1000
  For Index = 1 To xyz
    Operation + 1
  Next
Next

Temps3 = ElapsedMilliseconds()

MessageRequester("Temps", "For x * y * z = " + Str(Temps2 - Temps1) + #CR$ + "For xyz = " + Str(Temps3 - Temps2))

Publié : sam. 08/août/2009 16:29
par KrisJNT
Du coup, ce que tu annonçait au début est... bel et bien vrai :
2754ms pour x*y*z et 1553ms pour xyz...
Désolé LSI, tu as eu un faux espoir... :)

Publié : sam. 08/août/2009 21:27
par Le Soldat Inconnu
a merde, exact, planté dans le messagerequester :(
Mais ça ne me change pas le résultat, j'ai strictement le même temps quand même.

J'ai essayé de compliqué

Code : Tout sélectionner

DisableDebugger

x = 1615
y = 125
z = 1.78

xy = x / y
xyz = x * y * z

Temps1 = ElapsedMilliseconds()

For n = 1 To 10000
	For Index = x / y To x * y * z
		Operation + 1
  Next
Next

Temps2 = ElapsedMilliseconds()

For n = 1 To 10000
	For Index = xy To xyz
		Operation + 1
  Next
Next

Temps3 = ElapsedMilliseconds()

MessageRequester("Temps", "For x * y * z = " + Str(Temps2 - Temps1) + #CR$ + "For xyz = " + Str(Temps3 - Temps2))
Mais toujours la même vitesse chez moi


Visiblement, ce n'est pas le cas pour tout le monde.
chez moi, j'ai 4500 / 4500 environ

Publié : dim. 09/août/2009 4:22
par Ollivier
C'est intéressant ça... Et avec ce test-ci, quelles valeurs tu obtiens?

Code : Tout sélectionner


#Home = #PB_Compiler_Home

Global Marge.I

Structure OpString
   TrustFileName.S
   Value.S
   CplProg.I   
   TrustLineQty.I
   CodeOp.I[63]
   CodeQty.I
EndStructure

Procedure Impr(Chaine.S)
  WriteStringN(0, Space(2 * Marge) + Chaine)
EndProcedure

Procedure.S CplInput(St.S)
   Protected I.I
   Protected Result.S
   Result = UCase(St)
   Result = ReplaceString(Result, ";", Chr(9) )
   ProcedureReturn Result
EndProcedure

Procedure.S G(Chaine.S)
  Protected Result.S
  Result = Chr(34) + Chaine + Chr(34)
  ProcedureReturn Result
EndProcedure

Procedure BouclageEcriture(nTest.I, nCouche.I, MaxExpr.S)
   Protected Variable.S
   Protected MaxBoucle.S
   Protected Couche.S
   Protected I.I
   MaxI = Int((nCouche - 1) / 26)
   Impr("Define Ini" + Str(nTest) + ".I")
   Impr("Define Fin" + Str(nTest) + ".I")
   Impr("! RDTSC")
   Impr("! MOV [v_Ini" + Str(nTest) + "], Eax")
   For I = 0 To MaxI
      If I = MaxI
         MaxJ = ((nCouche - 1) % 26)
      Else
         MaxJ = 25
      EndIf
      For J = 0 To MaxJ
         Variable = Chr(65 + I) + Chr(65 + J)
         Impr("For " + Variable + " = 0 To " + MaxExpr)
         Marge + 1
      Next J
   Next I
   Impr("! RDTSC")
   Impr("! MOV [v_Fin" + Str(nTest) + "], Eax")
   Impr("Break " + Str(nCouche) )
   For I = 0 To (nCouche - 1)
      Marge - 1
      Impr("Next")
   Next I
EndProcedure

Procedure StoreTrust(*C.OpString)
   With *C
      CreateFile(0, #Home + \TrustFileName + ".pb")
      Impr("DisableDebugger")
      BouclageEcriture(1, 100, "XYZTUVWXYZABCDEFGHIJKLM")
      BouclageEcriture(2, 100, "X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M")
      Impr("MessageRequester(" + G("Quantité approx de cycles utilisés") + ", " + G("Avec optimisation = ") + " + Str(Fin1 - Ini1) + " + G(" cycles") + " + Chr(10) + " + G("Sans optimisation = ") + " + Str(Fin2 - Ini2) + " + G(" cycles") + ")")
      CloseFile(0)
   EndWith
EndProcedure

Procedure CompileTrust(*C.OpString)
   With *C
      WriteProgramStringN(\CplProg, CplInput("SOURCE;" + #Home + \TrustFileName + ".pb") )
      WriteProgramStringN(\CplProg, CplInput("TARGET;" + #Home + \TrustFileName + ".EXE") )
      WriteProgramStringN(\CplProg, "COMPILE")
      ReadProgramString(\CplProg)
   EndWith
EndProcedure

Procedure ExecTrust(*C.OpString) ;

   Protected Result.I
   With *C
      Trust = RunProgram(#Home + \TrustFileName + ".EXE", "", "", #PB_Program_Hide | #PB_Program_Wait)
   EndWith

EndProcedure

Procedure CplOpen(*C.OpString)
   Protected St.S
   With *C
      \CplProg = RunProgram(#PB_Compiler_Home+"\Compilers\pbcompiler", "/STANDBY", "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Write|#PB_Program_Hide)
      If \CplProg
         Repeat
            Delay(15)
            St = ReadProgramString(\CplProg)
         Until St = "READY"
      Else
         MessageRequester("/!\", "Code 3")
      EndIf
   EndWith
EndProcedure

Procedure CplClose(*C.OpString)
   With *C
      WriteProgramStringN(\CplProg, "END")
      While ProgramRunning(\CplProg)
         Delay(100)
      Wend
      If ProgramExitCode(\CplProg) <> 0
         MessageRequester("/!\", "Code 2")
      EndIf
      CloseProgram(\CplProg)
   EndWith
EndProcedure

Procedure Comparatif(*C.OpString)
   With *C
      Delay(500)
      StoreTrust(*C)
      CompileTrust(*C)
      ExecTrust(*C)
   EndWith
EndProcedure

Procedure Main()

   Protected Op.OpString
   Protected St.S
   
   Op\TrustFileName = "TempForNextTest"
   CplOpen(Op)   
   Comparatif(Op)
   CplClose(Op)
   
EndProcedure

   Main()

Publié : dim. 09/août/2009 11:48
par Guimauve
Bonjour à tous,

Je viens de faire quelques tests avec ce code :

Code : Tout sélectionner

DisableDebugger ; j'ai rajouté aussi celui-là...

x = 1615
y = 125
z = 1.78

xyz = x * y * z

For TestID = 1 To 3
  
  Temps1 = ElapsedMilliseconds()
  
  For n = 1 To 1000
    For Index = 1 To x * y * z
      Operation + 1
    Next
  Next
  
  Temps2 = ElapsedMilliseconds()
  
  For n = 1 To 1000
    For Index = 1 To xyz
      Operation + 1
    Next
  Next
  
  Temps3 = ElapsedMilliseconds()
  
  MessageRequester("Temps - Test ID = " + Str(TestID), "For x * y * z = " + Str(Temps2 - Temps1) + #CR$ + "For xyz = " + Str(Temps3 - Temps2))
  
Next

Et sur mon ordinateur, les résultats donnes :
Test ID = 1
--> For x*y*z = 797
--> For xyz = 453

Test ID = 2
--> For x*y*z = 813
--> For xyz = 468

Test ID = 3
--> For x*y*z = 796
--> For xyz = 454
Et ça me semble logique puis que la multiplication x*y*z est faite à chacun des tours de boucle.

A+
Guimauve

Publié : dim. 09/août/2009 14:25
par erix14
Au lieu de faire des tests, il suffit de regarder le code ASM généré par le compilateur pour se rendre compte pourquoi c'est plus long...

Code : Tout sélectionner

; For n = 1 To 1000
	MOV	 dword [v_n],1
_For3:
	MOV	 eax,1000
	CMP	 eax,dword [v_n]
	JL	 _Next4
; For Index = 1 To x * y * z
	MOV	 dword [v_Index],1
_For5:
	MOV	 ebx,dword [v_x]
	IMUL	 ebx,dword [v_y]
	IMUL	 ebx,dword [v_z]
	CMP	 ebx,dword [v_Index]
	JL	 _Next6
; Operation + 1
	INC	 dword [v_Operation]
; Next
_NextContinue6:
	INC	 dword [v_Index]
	JMP	 _For5
_Next6:
; Next
_NextContinue4:
	INC	 dword [v_n]
	JMP	 _For3
_Next4:
On voit que le calcul est fait à chaque tour de boucle... Pourquoi ? Parce que ces 3 variables peuvent changer de valeur à chaque tour de boucle...

Publié : dim. 09/août/2009 18:06
par Le Soldat Inconnu
Bon alors Erix14 met fin au début, c'est calculé à chaque coup. Merci


Olivier : 2800 / 28000 en gros avec ton code

Publié : dim. 09/août/2009 19:14
par Ollivier
Moi chui pas d'accord qu'Erix14 mette fond au débit comme ça! Désolé, je suis beaucoup plus curieux que je ne vous semble l'être à ce sujet!

Erix14 sous-entend que la seule visu du fichier ASM est valable. Ce qui est quand même faux puisque c'est par là qu'on commence!! Le fichier ASM c'est la théorie. Dans la pratique, chaque CPU va allègrement avaler certaines de ces instructions selon le contexte que l'électronique est capable de prendre ou non en charge (multi-coeurs, pipeline, caches, etc...).

Et c'est bien le résultat de tels tests qui permet d'obtenir une idée. Notamment le dernier code que j'ai posté qui est radical: j'obtiens personnellement un rapport de 6 pour 1 avec un poste à galène à 1GHz. Donc, logiquement, même avec des grosses bécanes multi-coeur, vous avez forcément une différence significative.

Là où l'on est tous d'accord, c'est que ça n'est pas une optimisation à suggérer de mettre en natif, puisque, comme dit Erix14, dans le cas actuel la valeur de fin de boucle est mise à jour à chaque boucle, ce qui est une fonctionnalité à part entière.

Dans le cas où une boucle n'a pas à modifier sa valeur de fin durant son exécution, faire le calcul avant et le stocker dans une variable permet de gagner des ressources CPU. Là-dessus, je pense qu'on est aussi d'accord.

Mais, maintenant, LSI, d'une erreur d'inattention, tu as, je pense trouvé une caractéristique intéressante de ton CPU, qu'il est peut-être bon de mettre en lumière. C'est pour cela que j'ai posté ce dernier code plus haut. Il t'épargne de rédiger 100 boucles imbriquées l'une dans l 'autre, dont l'expression de max de boucle est modifiable à volonté en ligne 70:

Code : Tout sélectionner

BouclageEcriture(2, 100, "X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M")
Il stocke, compile et exécute ainsi le fichier enfant "TempForNextTest.PB". Dans ce cas-ci, 22 multiplications par boucle, sont effectuées pour bien saturer ton CPU. Mais n'hésite pas à diminuer le nombre de multiplications pour trouver le seuil d'équilibre. Pour ma part, il est à... 0 multiplications! (Quand je ne laisse que "X" en ligne 70). Dès que je mets une première multiplication, j'ai une moyenne de 28% de temps en cycles supplémentaires. Si ton CPU a plusieurs coeurs (je lis quad core dans ta signature), visiblement, avec une équivalence de temps de cycles quand tu lui fourgues 3 multiplications, c'est qu'il sollicite tous ses coeurs!

Je fantasme un peu mais si, à la 4ème multiplication insérée, tu restes dans un équilibre de temps de cycles (deux valeurs aproximativement idem de temps de cycles), c'est que ton CPU ne sollicite plus seulement tous ses coeurs, mais qu'il sollicite un éventuel cache. Dans ce cas, la capacité de ce cache peut-être étudiée pour savoir combien de variables mémoire et d'opération, il mémorise temporairement, etc... ça peut être très utile pour de futurs gros calculs répétitifs.

Bref! N'hésite pas à perdre un peu de temps à tester ce code et à m'en retourner quelques valeurs quand tu auras le temps. Je suis curieux de savoir ce que ça donne!

Pour info, le code enfant créé de manière automatique ressemble à ça:

Code : Tout sélectionner

DisableDebugger
Define Ini1.I
Define Fin1.I
! RDTSC
! MOV [v_Ini1], Eax
For AA = 0 To XYZTUVWXYZABCDEFGHIJKLM
  For AB = 0 To XYZTUVWXYZABCDEFGHIJKLM
    For AC = 0 To XYZTUVWXYZABCDEFGHIJKLM
      For AD = 0 To XYZTUVWXYZABCDEFGHIJKLM
        For AE = 0 To XYZTUVWXYZABCDEFGHIJKLM
          For AF = 0 To XYZTUVWXYZABCDEFGHIJKLM
            For AG = 0 To XYZTUVWXYZABCDEFGHIJKLM
              For AH = 0 To XYZTUVWXYZABCDEFGHIJKLM
                For AI = 0 To XYZTUVWXYZABCDEFGHIJKLM
                  For AJ = 0 To XYZTUVWXYZABCDEFGHIJKLM
                    For AK = 0 To XYZTUVWXYZABCDEFGHIJKLM
                      For AL = 0 To XYZTUVWXYZABCDEFGHIJKLM
                        For AM = 0 To XYZTUVWXYZABCDEFGHIJKLM
                          For AN = 0 To XYZTUVWXYZABCDEFGHIJKLM
                            For AO = 0 To XYZTUVWXYZABCDEFGHIJKLM
                              For AP = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                For AQ = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                  For AR = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                    For As = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                      For AT = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                        For AU = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                          For AV = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                            For AW = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                              For AX = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                For AY = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                  For AZ = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                    For BA = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                      For BB = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                        For BC = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                          For BD = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                            For BE = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                              For BF = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                For BG = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                  For BH = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                    For BI = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                      For BJ = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                        For BK = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                          For BL = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                            For BM = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                              For BN = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                For BO = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                  For BP = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                    For BQ = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                      For BR = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                        For BS = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                          For BT = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                            For BU = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                              For BV = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                For BW = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                  For BX = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                    For BY = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                      For BZ = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                        For CA = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                          For CB = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                            For CC = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                              For CD = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                For CE = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                  For CF = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                    For CG = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                      For CH = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                        For CI = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                          For CJ = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                            For CK = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                              For CL = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                For CM = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                  For CN = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                    For CO = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                      For CP = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                        For CQ = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                          For CR = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                            For CS = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                              For CT = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                For CU = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                  For CV = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                    For CW = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                      For CX = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                        For CY = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                          For CZ = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                            For DA = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                              For DB = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                For DC = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                  For DD = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                    For DE = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                      For DF = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                        For DG = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                          For DH = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                            For DI = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                              For DJ = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                For DK = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                  For DL = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                    For DM = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                      For DN = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                        For DO = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                          For DP = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                            For DQ = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                              For DR = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                                For DS = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                                  For DT = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                                    For DU = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                                      For DV = 0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                                        ! RDTSC
                                                                                                                                                                                                        ! MOV [v_Fin1], Eax
                                                                                                                                                                                                        Break 100
                                                                                                                                                                                                      Next
                                                                                                                                                                                                    Next
                                                                                                                                                                                                  Next
                                                                                                                                                                                                Next
                                                                                                                                                                                              Next
                                                                                                                                                                                            Next
                                                                                                                                                                                          Next
                                                                                                                                                                                        Next
                                                                                                                                                                                      Next
                                                                                                                                                                                    Next
                                                                                                                                                                                  Next
                                                                                                                                                                                Next
                                                                                                                                                                              Next
                                                                                                                                                                            Next
                                                                                                                                                                          Next
                                                                                                                                                                        Next
                                                                                                                                                                      Next
                                                                                                                                                                    Next
                                                                                                                                                                  Next
                                                                                                                                                                Next
                                                                                                                                                              Next
                                                                                                                                                            Next
                                                                                                                                                          Next
                                                                                                                                                        Next
                                                                                                                                                      Next
                                                                                                                                                    Next
                                                                                                                                                  Next
                                                                                                                                                Next
                                                                                                                                              Next
                                                                                                                                            Next
                                                                                                                                          Next
                                                                                                                                        Next
                                                                                                                                      Next
                                                                                                                                    Next
                                                                                                                                  Next
                                                                                                                                Next
                                                                                                                              Next
                                                                                                                            Next
                                                                                                                          Next
                                                                                                                        Next
                                                                                                                      Next
                                                                                                                    Next
                                                                                                                  Next
                                                                                                                Next
                                                                                                              Next
                                                                                                            Next
                                                                                                          Next
                                                                                                        Next
                                                                                                      Next
                                                                                                    Next
                                                                                                  Next
                                                                                                Next
                                                                                              Next
                                                                                            Next
                                                                                          Next
                                                                                        Next
                                                                                      Next
                                                                                    Next
                                                                                  Next
                                                                                Next
                                                                              Next
                                                                            Next
                                                                          Next
                                                                        Next
                                                                      Next
                                                                    Next
                                                                  Next
                                                                Next
                                                              Next
                                                            Next
                                                          Next
                                                        Next
                                                      Next
                                                    Next
                                                  Next
                                                Next
                                              Next
                                            Next
                                          Next
                                        Next
                                      Next
                                    Next
                                  Next
                                Next
                              Next
                            Next
                          Next
                        Next
                      Next
                    Next
                  Next
                Next
              Next
            Next
          Next
        Next
      Next
    Next
  Next
Next
Define Ini2.I
Define Fin2.I
! RDTSC
! MOV [v_Ini2], Eax
For AA = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
  For AB = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
    For AC = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
      For AD = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
        For AE = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
          For AF = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
            For AG = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
              For AH = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                For AI = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                  For AJ = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                    For AK = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                      For AL = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                        For AM = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                          For AN = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                            For AO = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                              For AP = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                For AQ = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                  For AR = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                    For As = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                      For AT = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                        For AU = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                          For AV = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                            For AW = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                              For AX = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                For AY = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                  For AZ = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                    For BA = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                      For BB = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                        For BC = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                          For BD = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                            For BE = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                              For BF = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                For BG = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                  For BH = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                    For BI = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                      For BJ = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                        For BK = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                          For BL = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                            For BM = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                              For BN = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                For BO = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                  For BP = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                    For BQ = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                      For BR = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                        For BS = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                          For BT = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                            For BU = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                              For BV = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                For BW = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                  For BX = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                    For BY = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                      For BZ = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                        For CA = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                          For CB = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                            For CC = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                              For CD = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                For CE = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                  For CF = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                    For CG = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                      For CH = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                        For CI = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                          For CJ = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                            For CK = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                              For CL = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                For CM = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                  For CN = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                    For CO = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                      For CP = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                        For CQ = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                          For CR = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                            For CS = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                              For CT = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                For CU = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                  For CV = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                    For CW = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                      For CX = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                        For CY = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                          For CZ = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                            For DA = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                              For DB = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                                For DC = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                                  For DD = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                                    For DE = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                                      For DF = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                                        For DG = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                                          For DH = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                                            For DI = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                                              For DJ = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                                                For DK = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                                                  For DL = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                                                    For DM = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                                                      For DN = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                                                        For DO = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                                                          For DP = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                                                            For DQ = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                                                              For DR = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                                                                For DS = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                                                                  For DT = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                                                                    For DU = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                                                                      For DV = 0 To X * Y * Z * T * U * V * W * X * Y * Z * A * B * C * D * E * F * G * H * I * J * K * L * M
                                                                                                                                                                                                        ! RDTSC
                                                                                                                                                                                                        ! MOV [v_Fin2], Eax
                                                                                                                                                                                                        Break 100
                                                                                                                                                                                                      Next
                                                                                                                                                                                                    Next
                                                                                                                                                                                                  Next
                                                                                                                                                                                                Next
                                                                                                                                                                                              Next
                                                                                                                                                                                            Next
                                                                                                                                                                                          Next
                                                                                                                                                                                        Next
                                                                                                                                                                                      Next
                                                                                                                                                                                    Next
                                                                                                                                                                                  Next
                                                                                                                                                                                Next
                                                                                                                                                                              Next
                                                                                                                                                                            Next
                                                                                                                                                                          Next
                                                                                                                                                                        Next
                                                                                                                                                                      Next
                                                                                                                                                                    Next
                                                                                                                                                                  Next
                                                                                                                                                                Next
                                                                                                                                                              Next
                                                                                                                                                            Next
                                                                                                                                                          Next
                                                                                                                                                        Next
                                                                                                                                                      Next
                                                                                                                                                    Next
                                                                                                                                                  Next
                                                                                                                                                Next
                                                                                                                                              Next
                                                                                                                                            Next
                                                                                                                                          Next
                                                                                                                                        Next
                                                                                                                                      Next
                                                                                                                                    Next
                                                                                                                                  Next
                                                                                                                                Next
                                                                                                                              Next
                                                                                                                            Next
                                                                                                                          Next
                                                                                                                        Next
                                                                                                                      Next
                                                                                                                    Next
                                                                                                                  Next
                                                                                                                Next
                                                                                                              Next
                                                                                                            Next
                                                                                                          Next
                                                                                                        Next
                                                                                                      Next
                                                                                                    Next
                                                                                                  Next
                                                                                                Next
                                                                                              Next
                                                                                            Next
                                                                                          Next
                                                                                        Next
                                                                                      Next
                                                                                    Next
                                                                                  Next
                                                                                Next
                                                                              Next
                                                                            Next
                                                                          Next
                                                                        Next
                                                                      Next
                                                                    Next
                                                                  Next
                                                                Next
                                                              Next
                                                            Next
                                                          Next
                                                        Next
                                                      Next
                                                    Next
                                                  Next
                                                Next
                                              Next
                                            Next
                                          Next
                                        Next
                                      Next
                                    Next
                                  Next
                                Next
                              Next
                            Next
                          Next
                        Next
                      Next
                    Next
                  Next
                Next
              Next
            Next
          Next
        Next
      Next
    Next
  Next
Next
MessageRequester("Quantité approx de cycles utilisés", "Avec optimisation = " + Str(Fin1 - Ini1) + " cycles" + Chr(10) + "Sans optimisation = " + Str(Fin2 - Ini2) + " cycles")

Publié : dim. 09/août/2009 21:35
par Ollivier
Le Soldat Inconnu a écrit :Olivier : 2800 / 28000 en gros avec ton code
Rapport de 1 pour 10 :?
Pas de cache, un seul coeur utilisé... ça tue l'amour ces chiffres...

Bon... Une soupe et je vais me coucher...

Publié : lun. 10/août/2009 9:58
par KrisJNT
Quel joli code ! :wink:

@erix14
Comment as-tu obtenu le code ASM ?

Publié : lun. 10/août/2009 14:00
par PAPIPP
Bonjour à tous
@Ollivier l'instruction asm RDTSC charge les registres EAX et EDX
L'instruction RDTSC est un mnémonique pour Read Time Stamp Counter. L'instruction retourne dans le couple de registre EDX:EAX le nombre de ticks[1] écoulés depuis la dernière remise à zéro du processeur (Reset).

L'instruction lit simplement un registre spécial de 64 bits, nommé Time Stamp Counter (compteur temporel) et place le résulat dans les registres EDX et EAX. La partie haute du compteur temporel (32 bits de poids fort) est placée dans le registre EDX tandis que la partie basse (32 bits de poids faible) est placée dans le registre EAX.

* L'instruction fut ajoutée au processeur Pentium.

Opcode Instruction Description
0F 31 RDTSC Lit le compteur de temps et place le résultat dans les registres EDX et EAX
il est donc important de travailler avec toute l'information
j'ai réalié une macro

Code : Tout sélectionner

Macro nbc(cc)
  cc.q
  !RDTSC
  PUSH edx
  PUSH eax
  POP dword[v_#cc]
  POP dword[v_#cc+4]
EndMacro
ou la procédure

Code : Tout sélectionner

Procedure.q pnbc()
!RDTSC
  ProcedureReturn
EndProcedure
ce qui me donne le programme modifié suivant avec la macro

Code : Tout sélectionner

DisableDebugger
Macro nbc(cc)
  cc.q
  !RDTSC
  PUSH edx
  PUSH eax
  POP dword[v_#cc]
  POP dword[v_#cc+4]
EndMacro
Define Ini1.I
Define Fin1.I
Define dprg1.q
! RDTSC
! MOV [v_Ini1], Eax
nbc(dprg1)
For AA=0 To XYZTUVWXYZABCDEFGHIJKLM
  For AB=0 To XYZTUVWXYZABCDEFGHIJKLM
    For AC=0 To XYZTUVWXYZABCDEFGHIJKLM
      For AD=0 To XYZTUVWXYZABCDEFGHIJKLM
        For AE=0 To XYZTUVWXYZABCDEFGHIJKLM
          For AF=0 To XYZTUVWXYZABCDEFGHIJKLM
            For AG=0 To XYZTUVWXYZABCDEFGHIJKLM
              For AH=0 To XYZTUVWXYZABCDEFGHIJKLM
                For AI=0 To XYZTUVWXYZABCDEFGHIJKLM
                  For AJ=0 To XYZTUVWXYZABCDEFGHIJKLM
                    For AK=0 To XYZTUVWXYZABCDEFGHIJKLM
                      For AL=0 To XYZTUVWXYZABCDEFGHIJKLM
                        For AM=0 To XYZTUVWXYZABCDEFGHIJKLM
                          For AN=0 To XYZTUVWXYZABCDEFGHIJKLM
                            For AO=0 To XYZTUVWXYZABCDEFGHIJKLM
                              For AP=0 To XYZTUVWXYZABCDEFGHIJKLM
                                For AQ=0 To XYZTUVWXYZABCDEFGHIJKLM
                                  For AR=0 To XYZTUVWXYZABCDEFGHIJKLM
                                    For As =0 To XYZTUVWXYZABCDEFGHIJKLM
                                      For AT=0 To XYZTUVWXYZABCDEFGHIJKLM
                                        For AU=0 To XYZTUVWXYZABCDEFGHIJKLM
                                          For AV=0 To XYZTUVWXYZABCDEFGHIJKLM
                                            For AW=0 To XYZTUVWXYZABCDEFGHIJKLM
                                              For AX=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                For AY=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                  For AZ=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                    For BA=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                      For BB=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                        For BC=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                          For BD=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                            For BE=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                              For BF=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                For BG=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                  For BH=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                    For BI=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                      For BJ=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                        For BK=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                          For BL=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                            For BM=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                              For BN=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                For BO=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                  For BP=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                    For BQ=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                      For BR=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                        For BS=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                          For BT=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                            For BU=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                              For BV=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                For BW=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                  For BX=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                    For BY=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                      For BZ=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                        For CA=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                          For CB=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                            For CC=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                              For CD=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                For CE=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                  For CF=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                    For CG=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                      For CH=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                        For CI=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                          For CJ=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                            For CK=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                              For CL=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                For CM=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                  For CN=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                    For CO=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                      For CP=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                        For CQ=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                          For CR=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                            For CS=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                              For CT=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                For CU=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                  For CV=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                    For CW=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                      For CX=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                        For CY=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                          For CZ=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                            For DA=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                              For DB=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                For DC=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                  For DD=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                    For DE=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                      For DF=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                        For DG=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                          For DH=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                            For DI=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                              For DJ=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                For DK=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                  For DL=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                    For DM=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                      For DN=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                        For DO=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                          For DP=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                            For DQ=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                              For DR=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                                For DS=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                                  For DT=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                                    For DU=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                                      For DV=0 To XYZTUVWXYZABCDEFGHIJKLM
                                                                                                                                                                                                        ! RDTSC
                                                                                                                                                                                                        ! MOV [v_Fin1], Eax
                                                                                                                                                                                                        Break 100
                                                                                                                                                                                                      Next
                                                                                                                                                                                                    Next
                                                                                                                                                                                                  Next
                                                                                                                                                                                                Next
                                                                                                                                                                                              Next
                                                                                                                                                                                            Next
                                                                                                                                                                                          Next
                                                                                                                                                                                        Next
                                                                                                                                                                                      Next
                                                                                                                                                                                    Next
                                                                                                                                                                                  Next
                                                                                                                                                                                Next
                                                                                                                                                                              Next
                                                                                                                                                                            Next
                                                                                                                                                                          Next
                                                                                                                                                                        Next
                                                                                                                                                                      Next
                                                                                                                                                                    Next
                                                                                                                                                                  Next
                                                                                                                                                                Next
                                                                                                                                                              Next
                                                                                                                                                            Next
                                                                                                                                                          Next
                                                                                                                                                        Next
                                                                                                                                                      Next
                                                                                                                                                    Next
                                                                                                                                                  Next
                                                                                                                                                Next
                                                                                                                                              Next
                                                                                                                                            Next
                                                                                                                                          Next
                                                                                                                                        Next
                                                                                                                                      Next
                                                                                                                                    Next
                                                                                                                                  Next
                                                                                                                                Next
                                                                                                                              Next
                                                                                                                            Next
                                                                                                                          Next
                                                                                                                        Next
                                                                                                                      Next
                                                                                                                    Next
                                                                                                                  Next
                                                                                                                Next
                                                                                                              Next
                                                                                                            Next
                                                                                                          Next
                                                                                                        Next
                                                                                                      Next
                                                                                                    Next
                                                                                                  Next
                                                                                                Next
                                                                                              Next
                                                                                            Next
                                                                                          Next
                                                                                        Next
                                                                                      Next
                                                                                    Next
                                                                                  Next
                                                                                Next
                                                                              Next
                                                                            Next
                                                                          Next
                                                                        Next
                                                                      Next
                                                                    Next
                                                                  Next
                                                                Next
                                                              Next
                                                            Next
                                                          Next
                                                        Next
                                                      Next
                                                    Next
                                                  Next
                                                Next
                                              Next
                                            Next
                                          Next
                                        Next
                                      Next
                                    Next
                                  Next
                                Next
                              Next
                            Next
                          Next
                        Next
                      Next
                    Next
                  Next
                Next
              Next
            Next
          Next
        Next
      Next
    Next
  Next
Next
Define fprg1.Q
Define Ini2.I
Define Fin2.I
! RDTSC
! MOV [v_Ini2], Eax
nbc(fprg1)
For AA=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
  For AB=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
    For AC=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
      For AD=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
        For AE=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
          For AF=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
            For AG=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
              For AH=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                For AI=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                  For AJ=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                    For AK=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                      For AL=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                        For AM=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                          For AN=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                            For AO=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                              For AP=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                For AQ=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                  For AR=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                    For As =0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                      For AT=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                        For AU=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                          For AV=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                            For AW=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                              For AX=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                For AY=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                  For AZ=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                    For BA=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                      For BB=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                        For BC=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                          For BD=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                            For BE=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                              For BF=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                For BG=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                  For BH=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                    For BI=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                      For BJ=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                        For BK=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                          For BL=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                            For BM=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                              For BN=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                For BO=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                  For BP=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                    For BQ=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                      For BR=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                        For BS=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                          For BT=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                            For BU=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                              For BV=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                For BW=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                  For BX=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                    For BY=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                      For BZ=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                        For CA=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                          For CB=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                            For CC=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                              For CD=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                For CE=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                  For CF=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                    For CG=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                      For CH=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                        For CI=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                          For CJ=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                            For CK=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                              For CL=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                For CM=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                  For CN=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                    For CO=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                      For CP=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                        For CQ=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                          For CR=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                            For CS=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                              For CT=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                For CU=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                  For CV=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                    For CW=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                      For CX=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                        For CY=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                          For CZ=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                            For DA=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                              For DB=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                                For DC=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                                  For DD=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                                    For DE=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                                      For DF=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                                        For DG=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                                          For DH=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                                            For DI=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                                              For DJ=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                                                For DK=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                                                  For DL=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                                                    For DM=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                                                      For DN=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                                                        For DO=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                                                          For DP=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                                                            For DQ=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                                                              For DR=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                                                                For DS=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                                                                  For DT=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                                                                    For DU=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                                                                      For DV=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
                                                                                                                                                                                                        ! RDTSC
                                                                                                                                                                                                        ! MOV [v_Fin2], Eax
                                                                                                                                                                                                        Break 100
                                                                                                                                                                                                      Next
                                                                                                                                                                                                    Next
                                                                                                                                                                                                  Next
                                                                                                                                                                                                Next
                                                                                                                                                                                              Next
                                                                                                                                                                                            Next
                                                                                                                                                                                          Next
                                                                                                                                                                                        Next
                                                                                                                                                                                      Next
                                                                                                                                                                                    Next
                                                                                                                                                                                  Next
                                                                                                                                                                                Next
                                                                                                                                                                              Next
                                                                                                                                                                            Next
                                                                                                                                                                          Next
                                                                                                                                                                        Next
                                                                                                                                                                      Next
                                                                                                                                                                    Next
                                                                                                                                                                  Next
                                                                                                                                                                Next
                                                                                                                                                              Next
                                                                                                                                                            Next
                                                                                                                                                          Next
                                                                                                                                                        Next
                                                                                                                                                      Next
                                                                                                                                                    Next
                                                                                                                                                  Next
                                                                                                                                                Next
                                                                                                                                              Next
                                                                                                                                            Next
                                                                                                                                          Next
                                                                                                                                        Next
                                                                                                                                      Next
                                                                                                                                    Next
                                                                                                                                  Next
                                                                                                                                Next
                                                                                                                              Next
                                                                                                                            Next
                                                                                                                          Next
                                                                                                                        Next
                                                                                                                      Next
                                                                                                                    Next
                                                                                                                  Next
                                                                                                                Next
                                                                                                              Next
                                                                                                            Next
                                                                                                          Next
                                                                                                        Next
                                                                                                      Next
                                                                                                    Next
                                                                                                  Next
                                                                                                Next
                                                                                              Next
                                                                                            Next
                                                                                          Next
                                                                                        Next
                                                                                      Next
                                                                                    Next
                                                                                  Next
                                                                                Next
                                                                              Next
                                                                            Next
                                                                          Next
                                                                        Next
                                                                      Next
                                                                    Next
                                                                  Next
                                                                Next
                                                              Next
                                                            Next
                                                          Next
                                                        Next
                                                      Next
                                                    Next
                                                  Next
                                                Next
                                              Next
                                            Next
                                          Next
                                        Next
                                      Next
                                    Next
                                  Next
                                Next
                              Next
                            Next
                          Next
                        Next
                      Next
                    Next
                  Next
                Next
              Next
            Next
          Next
        Next
      Next
    Next
  Next
Next
Define fprg2.q
nbc(fprg2)
MessageRequester("Quantité approx de cycles.Q utilisés","Avec optimisation = "+StrU(Fprg1-dprg1)+" cycles"+Chr(10)+"Sans optimisation = "+StrU(Fprg2-fprg1)+" cycles")
MessageRequester("Quantité approx de cycles.Q str utilisés","Avec optimisation = "+Str(Fprg1-dprg1)+" cycles"+Chr(10)+"Sans optimisation = "+Str(Fprg2-fprg1)+" cycles")
MessageRequester("Quantité approx de cycles.OLLIV utilisés","Avec optimisation = "+Str(Fin1-Ini1)+" cycles"+Chr(10)+"Sans optimisation = "+Str(Fin2-Ini2)+" cycles")
Les résultats sont différents
Enfin j'ai réalisé un code plus compact qui ne correspond peut être pas au but à réaliser mais permet de multiplier la boucle incriminée

Code : Tout sélectionner

DisableDebugger
Macro nbc(cc)
  cc.q
  !RDTSC
  PUSH edx
  PUSH eax
  POP dword[v_#cc]
  POP dword[v_#cc+4]
EndMacro

Define Ini1.I
Define Fin1.I
Define dprg1.q
! RDTSC
! MOV [v_Ini1], Eax
nbc(dprg1)
iim.i=1000
For ii=0 To iim
  For AA=0 To XYZTUVWXYZABCDEFGHIJKLM
  Next
Next
Define fprg1.Q
Define Ini2.I
Define Fin2.I
! RDTSC
! MOV [v_Ini2], Eax
nbc(fprg1)
For ii=0 To iim
    For AA=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
    Next
 Next
Define fprg2.q
nbc(fprg2)
MessageRequester("Quantité approx de cycles.Q stru utilisés","Avec optimisation = "+StrU(Fprg1-dprg1)+" cycles"+Chr(10)+"Sans optimisation = "+StrU(Fprg2-fprg1)+" cycles")
MessageRequester("Quantité approx de cycles.Q str utilisés","Avec optimisation = "+Str(Fprg1-dprg1)+" cycles"+Chr(10)+"Sans optimisation = "+Str(Fprg2-fprg1)+" cycles")
MessageRequester("Quantité approx de cycles.OLLIV utilisés","Avec optimisation = "+Str(Fin1-Ini1)+" cycles"+Chr(10)+"Sans optimisation = "+Str(Fin2-Ini2)+" cycles")
A+

Publié : lun. 10/août/2009 21:39
par Ollivier
Si tu avais envie de te moquer de moi, c'est réussi.

Qu'est-ce que tu veux que je te réponde? Je vais aller m'auto-flageller, prendre une soupe et aller me coucher.

Publié : mar. 11/août/2009 3:55
par Ollivier
@PAPIPP

1) Tu me rabaches un truc que je sais déjà sur RDTSC, de ta part, comme de celle de Progi1984, donc inutile
2) Tu corriges le gros listing qui est un code source enfant donc ce n'est pas lui qu'il est bon de corriger mais son code générateur (listing précédent, bien plus court qui, rapidement modifié te crache un bon millier de codes enfant comme celui ci-dessus)
3) Dans ce listing, tu mets les moyens de mesure autour des deux boucles, donc absolument inutile
4) Tu crées toi-même un code où tu fais des comparatifs à la one again. De surcroît, puisque tu imbriques deux comparatifs l'un dans l'autre, à croire qu'un instrument de mesure de durée doit mesurer AUSSI le second instrument, c'est donc inutile
5) Tu affiches OLLIV sur un procédé où il n'y a pas de fin de mesure: c'est carrément mon genre, donc aussi inutile que moqueur

Regarde le code générateur plus haut, il est élaboré et réfléchi. Il n'y en a que trois ainsi publiés sur le forum. Tu ne te rends pas compte que cette méthode non autonome au compilateur te transforme des semaines, voire des mois de rédaction de code à quelques secondes d'exécution.

Le premier code t'affiche les modes écran graphiques avec accélération matérielle et s'en libère sans problème, chose impossible à faire en temps normal.

Le second code te déballe tout le jeu d'instruction machine dispo sur ton CPU à ta guise. Chose strictement impossible à faire en temps normal avec une telle simplicité de code, comme dans pratiquement tous les langages existant au monde. J'en ai remercié les auteurs de la librairie OnError.

Ce code-ci (le code générateur plus haut) utilise aussi cette méthode, je l'ai fait parce qu'il n'y a pas le choix. LSI prétendait quelque chose d'insolite. A durée égale, le seul moyen c'est de mesurer précisément LA ligne critique et de la répéter au maximum, non pas logiciellement (sauts), mais matériellement, pour avoir la précision maximum, car le saut use des cycles. Le chargement dans EDX, d'une part, c'est déjà une perte de précision, puisque des cycles s'écoulent, et d'autre part, dans ce type de mesure, il n'est utile qu'une fois sur mille voire plus rarement, et peut être substitué après enregistrement des temps, par une vérification du signe de la durée (signe négatif = mesure de temps erronée).

Maintenant, si tu trouves que tu as raison et que ta méthode est la meilleure, c'est ton souci: dans le dernier code que tu as mis, les résultats sont DEUX fois moins précis. Mais ne m'y implique pas, parce qu'avec deux fois moins de précision, c'est sûr qu'Erix14 a raison: s'en tenir au fichier ASM est suffisant!


@KrisJNT

Voici le code pour récupérer le listing ASM d'un programme PB dans le presse-papier:

Code : Tout sélectionner

SetClipboardText("Problème!")
Prog.S = #PB_Compiler_Home+"\Compilers\pbcompiler"
Flags = #PB_Program_Hide|#PB_Program_Wait
ASM.S = #PB_Compiler_Home + "PureBasic.ASM"
PBFile.S = OpenFileRequester("Ouvrir un fichier PureBasic", "", "", 0)
If PBFile <> ""
  Param.S = "/COMMENTED " + PBFile
  If RunProgram(Prog, Param, #PB_Compiler_Home, Flags) 
    If FileSize(ASM) => 0  
      Listing = OpenFile(-1, ASM)
      If Listing
        SetClipboardText("")
        While Not Eof(Listing)
          SetClipboardText(GetClipboardText() + Chr(13) + ReadString(Listing) )
        Wend
        CloseFile(Listing)
        MessageRequester("Message", "Listing ASM transféré dans le presse-papier")
        DeleteFile(ASM)
      EndIf
    EndIf
  EndIf
EndIf

Publié : mar. 11/août/2009 8:48
par PAPIPP
@Ollivier
Excuse-moi de t’avoir blessé mais ce n’était pas mon but.
D’une part je suis un apprenti en PB et mes connaissances dans ce langage sont trop limitées pour me permettre la moindre moquerie. D’autre part j’ai bien trop d’admiration et de respect pour ce que tu fais. J’ai d’ailleurs profité de tes connaissances il y a peu de temps. Encore merci
Toute fois pour revenir au Pb
Comparer en temps la boucle ‘For AA=0 To XYZTUVWXYZABCDEFGHIJKLM’ qui n’a qu’une seule variable
ASM généré :

Code : Tout sélectionner

; For AA=0 To XYZTUVWXYZABCDEFGHIJKLM
	MOV	 dword [v_AA],0
_For3:
	MOV	 eax,dword [v_XYZTUVWXYZABCDEFGHIJKLM]
	CMP	 eax,dword [v_AA]
	JL	 _Next4
; Next
Avec celle-ci ‘For AA=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M’ qui comportent
23 variables et 22 multiplications
ASM généré :

Code : Tout sélectionner

; For AA=0 To X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M
	MOV	 dword [v_AA],0
_For7:
	MOV	 ebx,dword [v_X]
	IMUL	 ebx,dword [v_Y]
	IMUL	 ebx,dword [v_Z]
	IMUL	 ebx,dword [v_T]
	IMUL	 ebx,dword [v_U]
	IMUL	 ebx,dword [v_V]
	IMUL	 ebx,dword [v_W]
	IMUL	 ebx,dword [v_X]
	IMUL	 ebx,dword [v_Y]
	IMUL	 ebx,dword [v_Z]
	IMUL	 ebx,dword [v_A]
	IMUL	 ebx,dword [v_B]
	IMUL	 ebx,dword [v_C]
	IMUL	 ebx,dword [v_D]
	IMUL	 ebx,dword [v_E]
	IMUL	 ebx,dword [v_F]
	IMUL	 ebx,dword [v_G]
	IMUL	 ebx,dword [v_H]
	IMUL	 ebx,dword [v_I]
	IMUL	 ebx,dword [v_J]
	IMUL	 ebx,dword [v_K]
	IMUL	 ebx,dword [v_L]
	IMUL	 ebx,dword [v_M]
	CMP	 ebx,dword [v_AA]
	JL	 _Next8
; Next
Il n’y a pas un prg optimisé et l’autre pas mais deux prg différents.
Sauf pour XYZTUVWXYZABCDEFGHIJKLM=X*Y*Z*T*U*V*W*X*Y*Z*A*B*C*D*E*F*G*H*I*J*K*L*M si ces variables restent constantes pendant l'exécution
C'est ce que erix14 avait déjà remarqué
A+ et encore Merci.