Forum: PC-Programmierung Zeitmessung in C


von Anfänger (Gast)


Lesenswert?

Hey,
ich möchte in meinem C-Programm die Zeit für eine bestimmte Funktion 
messen, habe jedoch Probleme mit der Zeitmessung.
1
#include <stdio.h>
2
#include <time.h>
3
4
5
int main( void )
6
{
7
   int i;
8
   clock_t start, ende;
9
   float zeit;
10
11
   start=clock();
12
   for(i=0;i<10000;i++)
13
   {
14
       i*i;
15
   }
16
   ende=clock();
17
18
   zeit=(float)((ende-start)/CLOCKS_PER_SEC);
19
   printf("%f", zeit);
20
21
   return 0;
22
}

Das Programm zeigt immer nur 0,000000 Sekunden an, wieso?

von Stefan E. (sternst)


Lesenswert?

Anfänger schrieb:
> Das Programm zeigt immer nur 0,000000 Sekunden an, wieso?

Weil "(ende-start)/CLOCKS_PER_SEC" eine Integer-Berechnung ist. Das 
Ergebnis nach float zu casten nützt dir nichts. Du musst dafür sorgen, 
dass die Berechnung selber in float erfolgt.

von Peter II (Gast)


Lesenswert?

Anfänger schrieb:
> Das Programm zeigt immer nur 0,000000 Sekunden an, wieso?

weil der optimier gut ist.

von M. K. (sylaina)


Lesenswert?

Stefan Ernst schrieb:
> Weil "(ende-start)/CLOCKS_PER_SEC" eine Integer-Berechnung ist.

Richtisch, start und ende müssen nach Float gecastet werden, so wird nur 
das Ergebnis nach Float gecastet und das ist 0.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Außerdem dauern selbst bei ausgeschalteter Optimierung die paar
Multiplikationen deutlich weniger lang als Auflösungsschritt der
clock-Funktion.

Such mal nach "High Performance Counter". Damit lassen sich auf PCs
deutlich kürzere Zeiten messen. Die Verwendung ist allerdings abhängig
vom Betriebssystem.

von mar IO (Gast)


Lesenswert?

Yalu X. schrieb:
> "High Performance Counter"

Bei clang gibt es die Funktion __builtin_readcyclecounter(). Mit der 
kann man die Dauer von kurzen Funktionen messen. Vllt. gibt es für deine 
Plattform/Compiler sowas ähnliches.

Link zu clang Doku.: 
http://clang.llvm.org/docs/LanguageExtensions.html#builtin-functions

von Peter II (Gast)


Lesenswert?


von Rolf M. (rmagnus)


Lesenswert?

Yalu X. schrieb:
> Außerdem dauern selbst bei ausgeschalteter Optimierung die paar
> Multiplikationen deutlich weniger lang als Auflösungsschritt der
> clock-Funktion.

Bei eingeschalteter Optimierung wird die gesamte Schleife verworfen und 
es bleiben zwei direkt aufeinander folgende clock()-Aufrufe übrig.

Michael Köhler schrieb:
> Stefan Ernst schrieb:
>> Weil "(ende-start)/CLOCKS_PER_SEC" eine Integer-Berechnung ist.
>
> Richtisch, start und ende müssen nach Float gecastet werden, so wird nur
> das Ergebnis nach Float gecastet und das ist 0.

Ja. Alles < 1 Sekunde wird in diesem Fall 0 ergeben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.