CPU Stoppuhr Funktion



  • Hallo zusammen,

    wie frage ich die CPU zeit als ganzzahligen Wert ab um eine Aussage über die Rechenzeit meines Code zu bekommen?

    int main(int argc, char *argv[])
    {
     int elapsed_time=0;        // Alle Zeiten der Stoppuhr sind ganzzahlig
     int time=cputime;          // aktuelle CPU Zeit abfragen ??????WIE GEHT DAS?????
    
     cpu_rumschicken;           // nur ein Beispiel einer rechenintensiven Anwendung
    
     elapsed_time=cputime-time; // aktuelle CPU Zeit abfragen und Zeit vor
                                // rechenintensiver Anwendung abziehen WIE GEHT DAS?
    
     printf("Das Programm benötigt zur Ausführung %d millisekunden",elapsed_time);
    
     system("PAUSE");
     return 0;
    }
    

    Vielen Dank,
    Euer Kevin



  • time() liefert die Systemzeit (in Sekunden seit 1.1.1970), clock() die Zeit seit Programmstart (in Clock-Ticks). Such dir aus, was besser passt.

    (falls dir beides zu ungenau ist, bleiben noch spezifische Funktionen des Betriebssystems als Alterantive)



  • Vielen Dank für die schnelle Antwort. CPU-Ticks zu zählen wäre für mich die elegantere Option. Wo kann ich dazu Beispiele finden? (Wg. Bibliothek und Aufruf)
    Danke schön!

    CStoll schrieb:

    time() liefert die Systemzeit (in Sekunden seit 1.1.1970), clock() die Zeit seit Programmstart (in Clock-Ticks). Such dir aus, was besser passt.

    (falls dir beides zu ungenau ist, bleiben noch spezifische Funktionen des Betriebssystems als Alterantive)



  • z.B. in der MSDN unter "clock()" 😉

    In Kurzfassung:

    #include <time.h>
    int main(int argc, char *argv[])
    {
      clock_t time=clock(),elapsed_time;
    
      cpu_rumschicken;           // nur ein Beispiel einer rechenintensiven Anwendung
    
      elapsed_time=clock()-time;
    
      printf("Das Programm benötigt zur Ausführung %d millisekunden",elapsed_time*1000/CLOCKS_PER_SEC);
    
      system("PAUSE");
      return 0;
    }
    


  • Wenn du Windows verwendest, schau dir QueryPerformanceFrequency() und QueryPerformanceCounter() an.

    Wenn du auf x86 arbeitest und dein Betriebssystem es zulässt, kannst du auch RDTSC verwenden. http://en.wikipedia.org/wiki/RDTSC
    Beachte die dort beschriebenen potentiellen Probleme mit RDTSC!



  • Vielen Dank für die Antwort! Das funktioniert. Es geht nur um den Test eines simplen Algorithmus der später auf einem embedded-prozessor läuft. 👍 👍 👍

    CStoll schrieb:

    z.B. in der MSDN unter "clock()" 😉

    In Kurzfassung:

    #include <time.h>
    int main(int argc, char *argv[])
    {
      clock_t time=clock(),elapsed_time;
    
      cpu_rumschicken;           // nur ein Beispiel einer rechenintensiven Anwendung
     
      elapsed_time=clock()-time;
    
      printf("Das Programm benötigt zur Ausführung %d millisekunden",elapsed_time*1000/CLOCKS_PER_SEC);
     
      system("PAUSE");
      return 0;
    }
    


  • lovepulse schrieb:

    Es geht nur um den Test eines simplen Algorithmus der später auf einem embedded-prozessor läuft.

    dafür sind aber irgendwelche performancemessungen auf PCs nicht geeignet...



  • Jo, besser wäre da gleich einen Timer auf dem Target zu benutzen. Oder halt das Oszi 😉



  • TactX schrieb:

    Oder halt das Oszi 😉

    das ist das einzig wahre 👍
    ohne ist man blind...


Log in to reply