Zeit für Berechnungen



  • hallo,
    welchen Befehl muss man angeben, sodass ich sehen kann, wie lang der Computer benötigt, um meine gewünschen Berechnungen ausrechnet. Geht dieses auch nur für einen bestimmten Teil im gesamten Programm? Sodass man es vielleicht alles in eine Schleife packen kann, wofür ich die Zeit gern hätte.




  • Mod

    volkard schrieb:

    suchst Du clock()?

    Oder einen Profiler?

    Was möchtest du erreichen? Dann können wir besser antworten.



  • Also, wenn ich Schleifenberechnungen habe und zB zwei Algorithmen miteinander vergleiche, von der Zeit des Berechnungsaufwands, dann würde ich gern die Zeit dafür ausgegeben bekommen. Für manche Algorithmen wird der Rechner sicherlich mehr Zeit brauchen als bei anderen Algorithmen.
    Ich hoffe ihr versteht mich jetzt besser.


  • Mod

    Um zu messen, wie lange er braucht: clock() & Co. Oder ein Betriebssystembefehl wie das Unix-Kommando time auf das ganze Programm anwenden (gibt bestimmt auch was ähnliches für Windows), falls das Programm nur einen Algorithmus hat. Oder die Betriebssystembibliotheken zu diesen Kommandos nutzen, wenn du die Messung im Programm haben möchtest (Die Betriebssystemfunktionen sind oft weitaus besser aufgelöst, sowohl was die Zeitauflösung angeht, als auch was die Aufteilung des Zeitverrauchs (User-Space, Kernel-Space, Echtzeit, CPU-Zeit) betrifft).
    Wenn du wissen willst, wieso der Algorithmus so lange braucht, wie er braucht und was man verbessern könnte: Profiler. Der macht im Prinzip das was im ersten Absatz beschrieben wird vollautomatisch. Denn du bist, wie du dir sicher denken kannst, nicht der erste mit diesem Problem.



  • Bei clock() musst du aber bedenken das der Wert nicht unbedingt um 1 incrementiert wird. Das können auch 200 (oder ...) sein.



  • Mit clock() bist du für Laufzeitmessungen in Programmen gut bedient.

    #include <time.h>
    clock_t  begin,end;
    double   zeit,seconds,milliseconds;
    int      i;
    ...
    begin = clock();                  // Start der Zeitmessung
    ...                               
    for(i=0;i<1000000;i++)            // hier ein etwas längerer Berechnungsblock
    {
       ...                            // mach irgendetwas  
    }
    end = clock();                    // Ende der Zeitmessung
    zeit = end-begin;                 // zeit in clocks
    seconds = zeit/CLOCKS_PER_SEC;    // zeit in Sekunden
                                      // CLOCKS_PER_SEC ist maschinenabhängig
                                      // aber ausreichend gross 
    milliseconds = ....;              // zeit in Millisekunden --> bitte selbst machen
    ...
    

    Genaue Syntax bitte nachlesen. Evtl. auch <sys/time.h> möglich oder erforderlich. Dieser Weg ist am besten geeignet zur Laufzeitprüfung verschiedener Algorithmen für ein und dieselbe längere Aufgabe (A oder B besser?). Für das Auffinden, wo unnötig Laufzeit verbraten wird, gibt es vielleicht besseres oder mit fremden Tools einfacheres.

    Reicht dir das?


Anmelden zum Antworten