Publié : sam. 16/mai/2009 19:19
Et ça donne quoi avec un exemple test?
Parce que ta procédure ne me cause absolument pas.

Bye.
Parce que ta procédure ne me cause absolument pas.



Bye.
Code : Tout sélectionner
Procedure.q ElapsedCycles()
!rdtsc
ProcedureReturn
EndProcedure
DisableDebugger ; ********************************************** 1
Delay(1) ; ***************************************************** 2
temp = ElapsedCycles()
For n = 1 To 100000000
trucATester + 1
Next n
Norm = ElapsedCycles() - temp
MessageRequester("Norm1", Str(Norm) + " - " + Str(trucATester))
Delay(1) ; ***************************************************** 3
temp = ElapsedCycles()
For n = 1 To 100000000
trucATester + 1
Next n
Opti = ElapsedCycles() - temp
MessageRequester("Opti1", Str(Opti) + " - " + Str(trucATester))
Delay(1) ; ***************************************************** Final
diff = Norm - Opti
MessageRequester("Diff", Str(diff))
Code : Tout sélectionner
Macro q_t_
"
EndMacro
Macro frmn(n)
q_t_#n# = q_t_ + Str(n) + " "
EndMacro
Macro frms(S)
q_t_#S# = q_t_ + S + " "
EndMacro
Macro frmf(F)
q_t_#F# = q_t_ + StrF(f) + " "
EndMacro
Macro frmd(D)
q_t_#D# = q_t_ + StrD(D) + " "
EndMacro
Macro frmQ(Q)
q_t_#Q# = q_t_ + StrQ(Q) + " "
EndMacro
Macro frmH(H)
q_t_#H# = q_t_ + Hex(H) + " "
EndMacro
Macro frmHq(Hq)
q_t_#Hq# = q_t_ + HexQ(Hq) + " "
EndMacro
Macro frmU(U)
q_t_#U# = q_t_ + Str(U) + " "
EndMacro
Macro _lng_()
"ligne=" + Str(#PB_Compiler_Line) + " "
EndMacro
; *********************
Macro dbgn(n)
Debug q_t_#n# = q_t_ + Str(n)
EndMacro
Macro dbgs(S)
Debug q_t_#S# = q_t_ + S
EndMacro
Macro dbgf(F)
Debug q_t_#F# = q_t_ + StrF(f)
EndMacro
Macro dbgd(D)
Debug q_t_#D# = q_t_ + StrD(D)
EndMacro
Macro dbgQ(Q)
Debug q_t_#Q# = q_t_ + StrQ(Q)
EndMacro
Macro dbgH(H)
Debug q_t_#H# = q_t_ + Hex(H)
EndMacro
Macro dbgHq(Hq)
Debug q_t_#Hq# = q_t_ + HexQ(Hq)
EndMacro
Macro dbgU(U)
Debug q_t_#U# = q_t_ + HexQ(U)
EndMacro
Procedure.q ElapsedCycles()
!rdtsc
ProcedureReturn
EndProcedure
For i=100 To 10000 Step 1000
t_dc1.q = Elapsedcycles()
t_d1 = ElapsedMilliseconds()
Debug "***"+frmn(t_dc1)+" "+frmn(t_d1)+" "+ frmn(t_dc1/t_d1)
Debug _lng_()
Delay(i)
t_dc2.q = Elapsedcycles()
t_d2 = ElapsedMilliseconds()
d_dc.q=t_dc2-t_dc1
d_d.q=t_d2-t_d1
r_dc=d_dc/d_d
Debug frmn(i)+" "+frmn(d_dc)+" "+frmn(t_dc2-t_dc1)+" "+frmn(d_d)+" "+frmn(t_d2-t_d1)+" "+frmn(r_dc)
Next
Code : Tout sélectionner
***t_dc1 = 113048850447864 t_d1 = 35415250 t_dc1/t_d1 = 3192095
ligne=83
i = 100 d_dc = 321035800 t_dc2-t_dc1 = 321035800 d_d = 93 t_d2-t_d1 = 93 r_dc = 3451997
***t_dc1 = 113049171559488 t_d1 = 35415343 t_dc1/t_d1 = 3192095
ligne=83
i = 1100 d_dc = 3513195088 t_dc2-t_dc1 = 3513195088 d_d = 1110 t_d2-t_d1 = 1110 r_dc = 3165040
***t_dc1 = 113052684891184 t_d1 = 35416453 t_dc1/t_d1 = 3192095
ligne=83
i = 2100 d_dc = 6705160008 t_dc2-t_dc1 = 6705160008 d_d = 2093 t_d2-t_d1 = 2093 r_dc = 3203612
***t_dc1 = 113059390142576 t_d1 = 35418546 t_dc1/t_d1 = 3192095
ligne=83
i = 3100 d_dc = 9897462128 t_dc2-t_dc1 = 9897462128 d_d = 3110 t_d2-t_d1 = 3110 r_dc = 3182463
***t_dc1 = 113069287701808 t_d1 = 35421656 t_dc1/t_d1 = 3192094
ligne=83
i = 4100 d_dc = 13089453664 t_dc2-t_dc1 = 13089453664 d_d = 4094 t_d2-t_d1 = 4094 r_dc = 3197228
***t_dc1 = 113082377249248 t_d1 = 35425750 t_dc1/t_d1 = 3192095
ligne=83
i = 5100 d_dc = 16281664328 t_dc2-t_dc1 = 16281664328 d_d = 5109 t_d2-t_d1 = 5109 r_dc = 3186859
***t_dc1 = 113098659005952 t_d1 = 35430859 t_dc1/t_d1 = 3192094
ligne=83
i = 6100 d_dc = 19473795888 t_dc2-t_dc1 = 19473795888 d_d = 6094 t_d2-t_d1 = 6094 r_dc = 3195568
***t_dc1 = 113118132894200 t_d1 = 35436953 t_dc1/t_d1 = 3192095
ligne=83
i = 7100 d_dc = 22665933880 t_dc2-t_dc1 = 22665933880 d_d = 7093 t_d2-t_d1 = 7093 r_dc = 3195535
***t_dc1 = 113140798918872 t_d1 = 35444046 t_dc1/t_d1 = 3192096
ligne=83
i = 8100 d_dc = 25858065008 t_dc2-t_dc1 = 25858065008 d_d = 8110 t_d2-t_d1 = 8110 r_dc = 3188417
***t_dc1 = 113166657071832 t_d1 = 35452156 t_dc1/t_d1 = 3192095
ligne=83
i = 9100 d_dc = 29050205080 t_dc2-t_dc1 = 29050205080 d_d = 9094 t_d2-t_d1 = 9094 r_dc = 3194436
Arrrrgh.Le Soldat Inconnu a écrit :pour les routines, j'ai une base de données de fonction, et je fais du copier coller des fonction dont j'ai besoin
Moi, j'adoooore reduire les routines et les rendre les plus rapides possibles. J'adore faire ca !!!! Je vais dire un truc débile mais c'est comme faire un sport de combat avec le processeur !***t_dc1 = 47421636415021 t_d1 = 21474718 t_dc1/t_d1 = 2208254
ligne=80
i = 100 d_dc = 221950894 t_dc2-t_dc1 = 221950894 d_d = 110 t_d2-t_d1 = 110 r_dc = 2017735
***t_dc1 = 47421858424908 t_d1 = 21474828 t_dc1/t_d1 = 2208253
ligne=80
i = 1100 d_dc = 2430114566 t_dc2-t_dc1 = 2430114566 d_d = 1093 t_d2-t_d1 = 1093 r_dc = 2223343
***t_dc1 = 47424288596828 t_d1 = 21475921 t_dc1/t_d1 = 2208254
ligne=80
i = 2100 d_dc = 4638585237 t_dc2-t_dc1 = 4638585237 d_d = 2110 t_d2-t_d1 = 2110 r_dc = 2198381
***t_dc1 = 47428927238220 t_d1 = 21478031 t_dc1/t_d1 = 2208253
ligne=80
i = 3100 d_dc = 6846894571 t_dc2-t_dc1 = 6846894571 d_d = 3094 t_d2-t_d1 = 3094 r_dc = 2212958
***t_dc1 = 47435774203554 t_d1 = 21481125 t_dc1/t_d1 = 2208253
ligne=80
i = 4100 d_dc = 9055406690 t_dc2-t_dc1 = 9055406690 d_d = 4093 t_d2-t_d1 = 4093 r_dc = 2212413
***t_dc1 = 47444829668907 t_d1 = 21485218 t_dc1/t_d1 = 2208254
ligne=80
i = 5100 d_dc = 11263259579 t_dc2-t_dc1 = 11263259579 d_d = 5110 t_d2-t_d1 = 5110 r_dc = 2204160
***t_dc1 = 47456092982584 t_d1 = 21490328 t_dc1/t_d1 = 2208253
ligne=80
i = 6100 d_dc = 13471647134 t_dc2-t_dc1 = 13471647134 d_d = 6093 t_d2-t_d1 = 6093 r_dc = 2211003
***t_dc1 = 47469564693023 t_d1 = 21496421 t_dc1/t_d1 = 2208254
ligne=80
i = 7100 d_dc = 15680048406 t_dc2-t_dc1 = 15680048406 d_d = 7110 t_d2-t_d1 = 7110 r_dc = 2205351
***t_dc1 = 47485244818726 t_d1 = 21503531 t_dc1/t_d1 = 2208253
ligne=80
i = 8100 d_dc = 17888221923 t_dc2-t_dc1 = 17888221923 d_d = 8094 t_d2-t_d1 = 8094 r_dc = 2210059
***t_dc1 = 47503133094527 t_d1 = 21511625 t_dc1/t_d1 = 2208254
ligne=80
i = 9100 d_dc = 20096502822 t_dc2-t_dc1 = 20096502822 d_d = 9109 t_d2-t_d1 = 9109 r_dc = 2206224
C'est pour cette raison (entre autres), qu'il est préférable de mettre toujours les procédures au début et non pas à la fin. N'oubliez pas que l'accès à une procédure se fait (par la machine)Il existe pour chaque machine un rapport constant entre le nb de cycles
et le temps elapse .Ce rapport est de 3192095 + ou - 1 pour ma machine...
ce que tu dis serait valable pour un langage interpreté (et encore.. mon pureGolo gere tres bien les 2 cas de figures)pbprint a écrit :@PapiPPC'est pour cette raison (entre autres), qu'il est préférable de mettre toujours les procédures au début et non pas à la fin. N'oubliez pas que l'accès à une procédure se fait (par la machine)Il existe pour chaque machine un rapport constant entre le nb de cycles
et le temps elapse .Ce rapport est de 3192095 + ou - 1 pour ma machine...
de cette manière:
1) Se positionner au début du code
2) Recherche du nom de procédure appelée (parcours ligne par ligne..)
3) Exécution de la procédure
4) Retour immédiat après l'instruction appelante (ici l'accès est direct car l'adresse de cette instruction est sauvegardée jusqu'à ce que l'exécution de la procédure soit terminée)
l'éditeur de liens permet d'ajuster les adresses des différentes procédures.
Prenons un exemple concret : imaginons un programme C qui fasse appel à une fonction toto() :
#include
int main()
{
printf("\n Appel de toto");
toto();
exit(0);
}
La compilation de ce programme se passera sans problème : le programme transcrit chaque instruction en langage assembleur. En rencontrant la ligne toto();, le programme notera simplement l'appel à la fonction toto. Le résultat obtenu est un fichier objet.
Lors de l'édition des liens, le programme cherchera alors l'emplacement de la fonction toto dans un des fichiers objet passés en paramètre. Il recherchera également la fonction printf et la fonction exit. Dans le programme exécutable final, il indiquera l'adresse de ces fonctions pour que celles-ci puissent être appelées.
+1 A la rigueur on peut considérer que ça diminue le temps de compilation... M'enfin à 2 - 3 millièmes près, faut pas pousser...Dobro a écrit :faudra voir a pas trop raconter de niaiseries quand meme
Je suis aussi partisan du GOTO. Tiens, je me demande si on pourrait coder n'importe quelle routine sans goto. En tout cas, en ASM, il est OBLIGATOIRE !!!!!Dobro a écrit :je suis partisant de garder le Goto par exemple alors que bien des membres
du forum voudraient le faire disparaitre