Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    31

    Ottenere il tempo di esecuzione in nanosecondi

    Ciao a tutti, sto sviluppando un programma in grado di generare parser partendo da un file che descrive la sintassi.

    Volevo monitorare l'efficenza sia del generatore che dei parser generati però, utilizzando questo codice per le macro:

    #define START_TIMER start = clock()
    #define STOP_TIMER end = clock()
    #define COMPUTATION_TIME tempo = (((double)(end - start)) / CLOCKS_PER_SEC)
    #define PRINT_C_T printf("Durata dell'operazione: %f s\n", COMPUTATION_TIME)

    e questo per l'utilizzo:

    START_TIMER;
    operazione(); // per esempio...
    STOP_TIMER;
    PRINT_C_T;

    mi viene restituito il tempo di esecuzione in secondi e la precisione arriva sino al milionesimo di secondo.

    Il problema è che gli algoritmi che ho scritto impiegano (fortunatamente) meno di un milionesimo di secondo per essere eseguiti (in base a quello che viene scritto).
    Di rado è capitato che impiegasse 1 o 2 milionesimi di secondo ed una sola volta ha impiegato 16 milionesimi...

    Ora io mi chiedo, come posso verificare il tempo di esecuzione in miliardesimi di secondo?
    Ma soprattutto, è possibile?

    Grazie mille a tutti in anticipo! Ciao!
    Ciamiz

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288

    Moderazione

    Hai dimenticato di specificare il linguaggio di riferimento nel titolo.
    Forniscimi questa informazione così la inserisco io nel titolo.

    In merito al tuo problema, se stiamo parlando di un sistema operativo "convenzionale" (mi si passi il termine) come Windows, dubito che sia realmente possibile effettuare una misurazione temporale con un'unità di tempo così estrema come i nanosecondi.
    VVoVe:
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    CLOCKS_PER_SEC della time.h indica il numero di cloack ogni secondo.
    Sapendo ogni quanto un cloack avviene e sapendo il numero di cloack durante l'esecuzione, in teoria potresti ricavare l'esecuzione in ns.
    Cavolate?

  4. #4
    Sapendo ogni quanto un cloack avviene e sapendo il numero di cloack durante l'esecuzione, in teoria potresti ricavare l'esecuzione in ns. Cavolate?
    Certo... Esistono dei limiti FISICI alla risoluzione ottenibile con un timer, questi limiti sono strettamente legati all'hardware ed al sistema operativo.

    In teoria sui sistemi più recenti potresti ottenere una risoluzione di 1ms, nella pratica dovrai limitarti al range 10-20ms.

    Cerca riferimenti a high-resolution timers con Google. Se l'hardware supporta i timer ad alta risoluzione con la funzione QueryPerformanceCounter (Windows) puoi raggiungere una risoluzione nell'ordine dei microsecondi.

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    3
    Se il tempo che devi misurare è inferiore alla precisione di macchina (cambia da macchina a macchina) ti conviene fare delle ripetizioni dell'algoritmo in modo tale che il tempo misurato sia superiore al tempo minimo misurabile e poi fare una media.
    codice:
    double start,media,end;
    int ripetizioni=20;
    
    for (i=0;i<ripetizioni;i++){
    start= clock();
      algoritmo();
    end=clock();
    media=media+(end - start) / CLOCKS_PER_SEC
    }
    mediafinale=media/ripetizioni;

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.