Newsgroup: it.comp.lang.c++
Titolo: misurazioni in millesimi di secondo

Salve,
devo compiere delle misurazioni su un programma che sto scrivendo in c/c++
sotto Linux. Per la precisione dovrei misurare quanto impiega a compiere una
funzione di read (e quindi far partire un timer prima della chiamata e
dopo). Solo che non riesco a trovare quale liberia standard usare e
soprattutto che funzione. Qualcuno saprebbe aiutarmi?
Ma esiste su internet un elenco completo delle librerie con relative
funzioni?
grazie
Andrea

andrea ha scritto:

La soluzione migliore - a mio avviso -  č scaricare il piů
possibile la macchina da altri processi il piů "possibilissimo"!)
ed usare il TSC della CPU con una chiamata assembly.
Piů preciso di cosě...
SiMoStro

Grazie SiMoStro,
ma il mio problema č proprio "come" realizzare tutto ciň. E' vero che mi
serve la precisione alta, ma basterebbe che qualcuno mi indicasse quali
funzioni usare. Tu mi dici di usare l'RTC ma non saprei come. Hai da
consigliarmi per caso dove documentarmi? O sai dirmi come fare?
Anche una soluzione meno "hardware" ;) ma che usi le librerie standard del
c++ andrebbe bene.
grazie
A.
"SiMoStro" <simostro@I_do_not_exixt.com> ha scritto nel messaggio
news:MDUIc.25743$tj3.1...@news3.tin.it...


 funzioni?
Che librerie? Tutte?
Ciao Andrea.

 O sai dirmi come fare?
Trai spunto da quanto segue; la sysctlbyname (e simili) potrebbe
non esserci nel tuo sistema (Windows? allora sicuramente non c'č),
dunque devi ricavarti la frequenza di clock in altre maniere.
Il seguente codice gira sotto FreeBSD, eventualmente cerca in rete
il modo in cui sulla tua macchina - e col tuo compilatore - sia
possibile effettuare la rdtsc (ReaD Time Stamp Counter):
tsc.h :
-----------------------
#ifndef GET_TSC_H
#define GET_TSC_H
#include <sys/types.h>
#include <sys/sysctl.h>
typedef union {
 unsigned long long ts;
 struct {
    unsigned long lo;
    unsigned long hi;
  } ts_;
} timestamp_t;
// TSC corrente
#define get_tsc(ts)                     \
        {                               \
          asm volatile ("rdtsc"         \
          : "=d" ((ts).ts_.hi),         \
            "=a" ((ts).ts_.lo));        \
        }
// Restituisce i clock/secondo della CPU
extern int get_ticks();
#endif
------------------
tsc.c:
------------------
#include "tsc.h"
int get_ticks(){
        int buff;
        size_t len;
        len=sizeof(buff);
        if(sysctlbyname("machdep.tsc_freq", &buff, &len, 0, 0) < 0)
                return 0;
        return buff;
}
-----------------
Comunque siamo andati OT. :-)
SiMoStro


So che sono il solito rompiballe, ma siete OT: 
it.comp.os.linux.development esiste apposta :)
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://www.cs.unibo.it/~mbellett
Linux registered user 299762 @ Linux registered machine 213003

 non esserci nel tuo sistema (Windows? allora sicuramente non c'è),


 ha scritto nel messaggio
news:cd1vpi$tfo$3...@le1.cs.unibo.it...


 ha scritto nel messaggio
news:cd154s$olt$1...@admin.servernet...


 xchè siamo andati OT?
Perché qui si parla di C++ standard.
SiMoStro

 Cmq programmo sotto Linux e no nsotto win;)
Giusto per la precisione: anche gettimeofday è FreeBSD e compila
perfettamente sotto Linux.
clock() è invece una funzione standard del C ed è altamente portabile.
Il C++ standard non ha librerie che si occupano di misurare il tempo, quindi
ti devi accontentare... ;o)