Re: [LUGOS-PROG] merjenje časa natačneje kot na se kunde

Ales Bardorfer alesb at robo.fe.uni-lj.si
Fri Nov 2 10:40:34 CET 2001


On Fri, 2 Nov 2001, Blaz Antonic wrote:

> > S PC-om tega ne boš izmeril! Mislim, tako natancno.
>
> Seveda lahko, samo ne na tak nacin (time()). Imas visokoresolucijski
> timer, do katerega (IMO) nimas dostopa v Linuxu (nekje se mi zdi da sem
> imel asm source pa ga trenutno ne najdem) in procesorjev stevec ciklov
> oz. nekaj podobnega na novejsih (Pentium in novejsi) procesorjih ?!

Imas dostop, imas, tudi na Linux-u. Le da to ni timer v smislu da bi
lahko prozil kaksne prekinitve in izvajal doloceno kodo v tocno dolocenih
trenutkih. Za tako funkcionalnost priporocam Real-Time Linux
<www.rtlinux.org>.
Samo za merjenje casa oz. trenutka, kdaj se dolocena koda izvaja, pa mirno
lahko uporabis zgoraj omenjeni timer, oz. to je bolj stevec, ki monotono
narasca s taktom procesorja, ne glede na OS, software...

Spodnja funkcija read_tsc() vrne st. procesorjevih ciklov (Pentium in
novejsi) od boot-a (uptime) naprej. Za merjenje relativnega casa samo
preracunaj razliko dveh odcitkov v SI sekundo ali kar ti je ljubse. Na
overflow tipa long long lahko mirno pozabis, ker na 1 GHz procesorju
nastopi po 150 letih!

Stevec ima izredno veliko resolucijo, in s tem veliko natancnost. To pa se
ne pomeni tudi velike natancnosti meritve casa, ker je vprasanje, kdaj bo
ta funkcija klicana! To je predvsem vprasanje razvrscevalnika (scheduler)
in ob obremenjenem CPU-ju ti visoka resolucija Pentium stevca prav nic ne
koristi.

Za absolutno merjenje casa bo pa bolj tezko doseci tako natancnost, saj
dvomim, da poznas tocen cas vklopa racunalnika, napako frekvence takta,
temperaturno odvisnost...


#include <stdio.h>

/* Pentium internal counter access */
static inline long long read_tsc(void) {
  long long time;
  __asm__ __volatile__( "rdtsc" : "=A" (time));
  return time;
}

int main(void) {
  unsigned long long t1;
  t1 = read_tsc();
  printf("t = %llu\n", t1);
  return(0);
}


Pri prevajanju z gcc uporabi -O2 optimizacijo.

lp,
Ales




More information about the lugos-prog mailing list