Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

clock() returnerer *bare* 0?

3 views
Skip to first unread message

Carl-Erik Kopseng

unread,
Oct 3, 2005, 9:10:35 PM10/3/05
to
Skulle prøve å time en del i programmet mitt; noe à la
clock_t tid1 = clock();
funksjons_kall_som_skal_times();
double tid_brukt = (clock() - tid1)/CLOCKS_PER_SEC;

Problemet mitt er at clock() returnerer 0, og jeg skjønner ikke hvorfor!
For å se om det bare var mine dårlige kunnskaper det sto på kompilerte jeg
følgende eksempel fra en
c++ faq om <time.h>. Denne snutten skal telle ned fra 10 i ett-sekunds
intervaller, men den blir ferdig på
under 1 sek... Har noen en idè om hva som skjer? Sitter på en gnu/linux-boks
med 2.6.10.
Har prøvd med gcc versjon 3.3, 3.4., og 4.0.


/* clock example: countdown */
#include <stdio.h>
#include <time.h>

void wait ( int seconds )
{
clock_t endwait;
endwait = clock () + seconds * CLK_TCK ;
while (clock() < endwait) {}
}

int main ()
{
int n;
printf ("Starting countdown...\n");
for (n=10; n>0; n--)
{
printf ("%d\n",n);
wait (1);
}
printf ("FIRE!!!\n");
return 0;
}

m225g $time ./a.out
Starting countdown...
10
9
8
7
6
5
4
3
2
1
FIRE!!!

real 0m0.794s
user 0m0.022s
sys 0m0.081s

Igor V. Rafienko

unread,
Oct 3, 2005, 9:58:53 PM10/3/05
to
[ Carl-Erik Kopseng ]

> Skulle prøve å time en del i programmet mitt; noe à la
> clock_t tid1 = clock();
> funksjons_kall_som_skal_times();
> double tid_brukt = (clock() - tid1)/CLOCKS_PER_SEC;


Vil du profilere funksjonen din, bør du bruke dertil egnede verktøy.
Fx. gprof.

[ ... ]


> void wait ( int seconds )
> {
> clock_t endwait;
> endwait = clock () + seconds * CLK_TCK ;


CLOCKS_PER_SEC.

Legg dog merke til at:

POSIX requires that CLOCKS_PER_SEC equals 1000000 independent of the
actual resolution.

[ ... ]

ivr
--
"...but it's HDTV -- it's got a better resolution than the real world."
-- Fry, "When aliens attack"

Erik Naggum

unread,
Oct 3, 2005, 9:51:23 PM10/3/05
to
* Carl-Erik Kopseng @2005-10-04 01:10Z

> Skulle prøve å time en del i programmet mitt; noe à la
> clock_t tid1 = clock();
> funksjons_kall_som_skal_times();
> double tid_brukt = (clock() - tid1)/CLOCKS_PER_SEC;

Merk at clock() returnerer CPU-tid, ikke real time.

> Problemet mitt er at clock() returnerer 0, og jeg skjønner ikke
> hvorfor!

Du har en altfor rask datamaskin. Bytt til en (mye) eldre modell. ;)
Ellers må du huske hvordan aritmetikk fungerer i C. Det at du typen
på venstresiden er double, gjør ikke /aritmetikken/ på høyresiden til
double. Her deler du store heltall på hverandre, og du får definitivt
ikke double av dét. Prøv å bytte ut CLOCKS_PER_SEC med
(1.0d0*CLOCKS_PER_SEC) eller du kan gjøre:

double cpu_waste = clock();
/* whatever */
cpu_waste -= clock();
cpu_waste /= -CLOCKS_PER_SEC;

> For å se om det bare var mine dårlige kunnskaper det sto på
> kompilerte jeg følgende eksempel fra en c++ faq om <time.h>.

Dét eksempelet er virkelig ikke noe noen bør kopiere. Fysj så dårlig!

> Denne snutten skal telle ned fra 10 i ett-sekunds intervaller, men
> den blir ferdig på under 1 sek... Har noen en idè om hva som skjer?

Du har brukt gal multiplier. Bytt ut CLK_TCK med CLOCKS_PER_SEC.

--
Erik Naggum 2005-277-05514 «lectitare humanum est»

Member of AAAS, ACM, AMS, APS, ASA, EMS, IMS, MAA, NMF, NYAS.
http://naggum.no/nocebo -- fear of harm is by itself harmful.

signature.asc
0 new messages