Laufzeit messen



  • Hallo,
    ich habe ein Problem.Habe ein Algorithmus geschrieben und möchte jetzt die genaue Laufzeit ausgeben,möglchst auf 1/1000 sekunde.(dieses in c und unter Windows).Könnt ihr mir bitte helfen?Beim googlen habe ich auch nichts sinnvolles gefunden.



  • Die einzige Möglichkeit, die ISO C++ bietet, ist die Funktion clock. Diese hat auch eine nominelle Genauigkeit von Millisekunden. Allerdings solltest du beachten, dass unter Betriebssystemen wie Windows oder Linux die tatsächliche Genauigkeit geringer (höhere Abweichungen) ausfallen kann. Je nach dem, wie clock implementiert ist.
    Wenn das nicht ausreicht, gibt es zumindest für Windows noch QueryPerformanceCounter/QueryPerformanceFrequency. Diese Funktionen gehören aber nicht mehr zum Standard.



  • Hallo,
    erstmal nochmal danke für die schnelle antwort.
    Ich schreibe ein Programm,was mehrere Algorithmen beeinhaltet die Stringmatching suche machen.Ich möchte gerne (muß:-))für jeden Algorithmus bei verschiedenen Texten die Laufzeit dazu gemessen bekommen.Habe jetzt in die Main dieses Programmes bevor die Auswahl der Algorithmen beginnt:
    clock_t start,end;
    start=clock();
    und nach der Auswahl
    end= clock();
    geschrieben.Er gibt mir nun aber für jeden Algorithmus eine 0 als Laufzeit aus.
    Das kann ja irgendwie nicht stimmen.Wisst ihr vielleicht was ich da falsch mache?



  • vielleicht ist das ein bisschen undeutlich gewesen von mir,hier noch mal die main zum schauen

    http://nopaste.biz/20953



  • ziemlich dreckiger programmierstil muss ich dir leider sagen - contraproduktiv ja, aber helfen kann ich dir auch nicht. Sry.



  • Hi,

    ich hab gerade mal den Timer in einer meiner DirectX Programme angeschaut und dort nimmt der Autor der timer-class die Zeit mit "timeGetTime()"

    extern "C"{
       unsigned long __stdcall timeGetTime(void);
    }
    
    #pragma comment(lib,"winmm.lib") //Required for timeGetTime
    

    Ich weiß nicht wie genau die Funktion ist, aber bei meinen Programm kann sie mir 4000 Frames per Second anzeigen, also müsste sie ja ne viertel Millisekunde mindestens schaffen (aber das ist nur vermutung)



  • timeGetTime liefert Millisekunden zurück.
    Falls die Timer Klasse die letzten paar Frame-Zeiten mittelt kann es schon sein dass sie tortzdem 4000 FPS ausspuckt.



  • Es kann auch einfach sein, dass es viel zu schnell geht und es deshalb keinen zeitunterschied gibt. Mach doch mal 10000 Durchläufe und mess die gesamtzeit.



  • und wie ist es nun möblich, einfach nur zum beispiel zu messen, wie lange ein schleife zum 10maligen durchlaufen braucht? würde mich gerne interssieren, vieleicht kann jemand helfen



  • Firefighter schrieb:

    und wie ist es nun möblich, einfach nur zum beispiel zu messen, wie lange ein schleife zum 10maligen durchlaufen braucht? würde mich gerne interssieren, vieleicht kann jemand helfen

    am einfachsten so: lass die schleife inner anderen for-schleife 1000000 durchlaufen. nimm dann davor und dannach die zeit mit clock(), dann nur noch die beiden ergebnisse subtrahieren und durch 1000000 teilen (double). so kannst die ungenauigkeit von clock() etwas ausgleichen, ansonsten eben QueryPerformanceCounter...

    unsigned i, k;
    clock_t start, ende;
    
    start=clock();
    
    for(i=0; i<1000000; ++i)
      for(k=0; k<10; ++k)/* die eigentliche schleife hier innen */
        do_something();
    
    ende=clock();
    
    //jetzt noch (ende-start)/1000000.
    


  • und welche lib muss ich da includieren?

    time.h?



  • das ist eher ein header: time.h
    und für die windows-spezifischen funktionen braucht man windows.h und die lib kernel32.lib oder libkernel32.a oder wie sie bei dir auch heißen mag.



  • also erstmal danke für die zahlreichen antworten,haben mir sehr geholfen.mit timegettime()bin ich weitergekommen.



  • Firefighter schrieb:

    time.h?

    <ctime>


Anmelden zum Antworten