getrusage() bekommen, um die Systemzeit in C zu messen

Lesezeit: 2 Minuten

Ich möchte die Systemzeit messen, die zum Ausführen von Code benötigt wird. Ich weiß, dass ich dazu den besagten Code zwischen zwei Aufrufen von getrusage() einfügen würde, aber ich erhalte einige unerwartete Ergebnisse …

#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
#include <stdio.h>

int main() {
  struct rusage usage;
  struct timeval start, end;
  int i, j, k = 0;

  getrusage(RUSAGE_SELF, &usage);
  start = usage.ru_stime;
  for (i = 0; i < 10000; i++) {
    /* Double loop for more interesting results. */
    for (j = 0; j < 10000; j++) {
      k += 20; 
    }
  }
  getrusage(RUSAGE_SELF, &usage);
  end = usage.ru_stime;

  printf("Started at: %ld.%lds\n", start.tv_sec, start.tv_usec);
  printf("Ended at: %ld.%lds\n", end.tv_sec, end.tv_usec);
  return 0;
}

Ich würde hoffen, dass dies zwei verschiedene Zahlen erzeugt, aber leider! Nachdem ich gesehen habe, wie mein Computer für ein oder zwei Sekunden nachdenkt, ist dies das Ergebnis:

Started at: 0.1999s
Ended at: 0.1999s

Benutze ich nicht getrusage() richtig? Warum sollten diese beiden Zahlen nicht unterschiedlich sein? Wenn ich grundlegend falsch liege, gibt es eine andere Möglichkeit, getrusage() zu verwenden, um die Systemzeit eines Quellcodes zu messen? Vielen Dank fürs Lesen.

  • Bitte beachten Sie das tv_usec sind Mikrosekunden, also sollte Ihr Format sein %lu.%06u.

    Benutzer109839

    1. Dezember 2015 um 9:06 Uhr

Sie missverstehen den Unterschied zwischen “Benutzer”- und “System”-Zeit. Ihr Beispielcode wird während der Messung hauptsächlich im Benutzermodus ausgeführt (dh Ihr Anwendungscode wird ausgeführt), aber die “Systemzeit” ist ein Maß für die Zeit, die für die Ausführung im Kernelmodus (dh die Verarbeitung von Systemaufrufen) aufgewendet wird.

ru_stime ist das richtige Feld zum Messen der Systemzeit. Zwischen den beiden von Ihnen geprüften Punkten liegt bei Ihrer Testanwendung einfach keine solche Zeit an.

  • Danke schön! Sie haben das besser erklärt, als mein Professor es könnte.

    – Starker Joe

    9. Mai 2012 um 8:06 Uhr

Du solltest benutzen usage.ru_utimewas stattdessen die verwendete Benutzer-CPU-Zeit ist.

  • Dies gibt mir in der Tat bessere Ergebnisse. Ich bin jedoch immer noch verpflichtet, einen funktionierenden Weg zu finden, um die Systemzeit von Code zu messen. Was nützt usage.ru_stime, wenn es nicht funktioniert?

    – Starker Joe

    9. Mai 2012 um 4:44 Uhr

  • Wenn das Programm für die Ausführung im Kernelmodus ausgelegt ist, verwenden Sie ru_stime. Ansonsten verwenden ru_utime.

    – Shinku

    9. Mai 2012 um 4:49 Uhr


Benutzeravatar von Manik Sidana
Manik Sidana

Verwenden Sie gprof. Dadurch erhalten Sie die Zeit, die jede Funktion benötigt. Installieren Sie gprof und verwenden Sie diese Flags für die Kompilierung: -pg -fprofile-arcs -ftest-coverage.

1437280cookie-checkgetrusage() bekommen, um die Systemzeit in C zu messen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy