Zum Inhalt springen

c# Frage


Bernhard_K
 Teilen

Empfohlene Beiträge

Hallo!

 

Mal eine ganz blöde Frage an das auskennende BB:

Wie bekomm ich ab gscheitesten eine Zeitmessung in C (unter Linux) hin?

 

Ich hab alles mögliche gefunden aber wie so oft nicht das was ich brauche.

 

Bisher hab ich

 

start = clock();

for(i=0;i

{

end = clock();

elapsed = ((double) (end - start)) / CLOCKS_PER_SEC;

printf("%d) %.5E \n",i,elapsed);

}

 

und die time.h verwendet*. Das streikt aber wenns ein bisserl länger dauert. (hab ich schon nachgelesen warum)

Wie schauts aus?

Kennt da wer was besseres?

Auch die echte Zeit anstelle der cputime wäre super! Aber eine Auflösung von ca einer ms brauch ich schon.

 

Danke schon mal!

 

*) Natürlich laufen da sonst sinnvollere Berechnungen in der Schleife ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

So wie ich das verstehe, liefert clock() die vom aktuellen Prozess verbrauchte CPU-Zeit, sollte also nicht zum Messen einer Zeitspanne verwendet werden, selbst wenn dein Prozess die maximale CPU Auslastung verursacht, wird das nicht auf Dauer funktionieren, da ja auch andere Prozesse zum Zug kommen und auch dein Prozess auf I/O Operationen warten kann, die dann nicht dazuzählen.

 

Die Konstante CLOCKS_PER_SEC ist übrigens fix mit 1000000 definiert, und hat mit der aktuellen Auflösung der Werte nicht zu tun.

 

Bei den clock_xxxxxxx Funktionen kannst du mit clock_getres() die echte Auflösung abfragen, und mit clock_gettime(CLOCK_REALTIME, ...) kannst du die aktuelle Systemzeit auslesen.

 

Die Frage ist natürlich, ob diese Funktionen vom Kernel deiner Plattform unterstützt werden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mal eine ganz blöde Frage an das auskennende BB:

Wie bekomm ich ab gscheitesten eine Zeitmessung in C (unter Linux) hin?

 

In welcher Aufloesung?

gettimeofday http://www.opengroup.org/onlinepubs/009695399/functions/gettimeofday.html ist max. auf Mikrosekunden genau (haengt vom jeweiligen System ab, wie genau er aufloest, unter Millisekunden auf jeden Fall).

 

Btw. ist das eine universelle Unix-Loesung, nicht nur fuer Linux geeignet.

Link zu diesem Kommentar
Auf anderen Seiten teilen

danke schon mal!

(Sry, dass ich mich erst jetzt wieder melde aber ich bin halt büro BBler ;) )

 

Brauch tu ich das eigentlich nur für prognosen weil die leuteln vom großrechner wissen wollen wie lange mein job ca braucht. Nachdem ich aber aus recht schnellen prozessen hochrechne reicht mir die sekunden auflösung die ich bisher zusammengebracht habe nicht aus.

clock() hab ich bisher verwendet (dass es nur die cpu-zeit ist wär nicht so tragisch) aber wenn der zeitraum zu lange ist wird der counter wieder auf 0 gesetzt wodurch man neg. zeitdifferenzen bekommt...

 

Werde mal die Varianten von euch versuchen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

 Teilen

×
×
  • Neu erstellen...