schleifen durchgangsdauer



  • hallo leute

    folgendes phaenomen:

    habe mir zu testzwecken ne funktion gebastelt, welche die dauer einer bestimmten funktion bzw. eines bestimmten befehls in prozessortaktzyklen ausgibt.

    das interessante dabei war, das befehle oder sonstiges schneller abgearbeitet werden, wenn man sie oeffters aufruft. zum beispiel mittels einer for-schleife.

    habe folgendes getestet:
    // AnsiString c="testing";
    if(c.SubString(1,4)=="test") a=1; else b=1;

    ich geb euch hier mal nen auszug des protokolls:

    for-schleife wird nur einmal durchlaufen:
    16384 Taktzyklen
    16944 " - "
    12252 " - "
    13576 " - "
    14460 " - "
    13088 " - "
    15356 " - "
    11804 " - "
    13208 " - "
    13644 " - "

    for-schleife wird nun 10 mal durchlaufen und ein mittelwert errechnet;
    3978 Taktzyklen
    4025 " - "
    4190 " - "
    4221 " - "
    3808 " - "
    3905 " - "
    4285 " - "
    4022 " - "
    3994 " - "
    3924 " - "

    gemessen hab ich uebrigens mittels rdtsc

    kann mir jemand erklaeren, wie das zustandekommt ?

    Meep Meep



  • Was benutzt du für einen Rechner?
    Wie zählst du dir Takte.
    Wenn zu die Zeiten misst und in Takte umrechnest, so werden beim einmaligen Durchlauf das Stück Code nicht im Cache sein und muß erst aus dem RAM geholt werden mit den zugehörigen Wartezeiten, RAM ist langsamer als Level1/Level2 Cache. Beim mehrmaligen Duchlauf befinden sich die Daten Cache und werden mit der maximal möglichen Geschwindigkeit abgearbeitet, daher kommen auch die kürzeren Zeiten



  • hab wie schon gesagt mittels rdtsc die takte gezaehlt. hab ich aus dem assembler-forum.
    danke fuer die erklaerung. das mit dem cache is einleuchtend.

    Meep Meep



  • kannst du dich mal ein bisschen über das rdtsc oder einen Link auf den
    entsprechenden Thread setzen

    Danke PAD




Anmelden zum Antworten