Mesurer le temps en Millisecondes en C

Résolu
PClément Messages postés 9 Statut Membre -  
 SS -
Bonjour,

J'aimerai connaître la vitesse d'éxecution des mes algorithmes.
Je programme en C (pas C++) et je ne sais pas comment faire.

Je connais la librairie <time.h> mais les temps donnés se présentent en secondes uniquement ! Et mon algorithme est censé durer une centaine de millisecondes en principe. Donc cette librairie ne me sert à rien...

Alors une solution serait de créer un projet en C++ spécialement pour mesurer ce temps, mais ça ne m'amuse pas des masses...
Auriez vous une autre solution rapide que je peux implémenter dans mon code en C svp ?

Merci

6 réponses

  1. Paulian
     
    Bonjour,
    Voila cela devrait t'aider

    #include <stdio.h>
    #include <stdlib.h>

    #include <time.h>

    int main()
    {
    long i = 6000000L;
    clock_t start, finish;
    double duration;

    // Delay for a specified time.
    start = clock();
    while( i-- )
    ;
    finish = clock();
    duration = (double)(finish - start) / CLOCKS_PER_SEC;
    printf( "%2.1f seconds\n", duration );

    return 0;
    }
    17
    1. SS
       
      Merci
      0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    Hello
    avec gettimeofday

    struct timeval {
    time_t tv_sec; /* seconds */
    suseconds_t tv_usec; /* microseconds */
    };

    and gives the number of seconds and microseconds since the Epoch (see time(2))
    11
    1. dd
       
      Arrêtez de mettre des trucs dont on n'y comprends rien.
      0
    2. Sylafrs
       
      je vois pas en quoi c'est incomprehensible..
      il donne le nom de la fonction et la structure utilisée..

      Et ressort le timestamp avec un nombre de millisecondes
      1
  3. PClément Messages postés 9 Statut Membre 6
     
    Salut

    Hum, merci mais je n'ai pas été convaincu :\ il faut inclure des librairies de c++ et ça ne compile pas avec mon prog en C uniquement.
    Merci quand même.

    Je sens qu'il va me falloir opter pour la solution C++ et winprecisetime..
    2
  4. PClément Messages postés 9 Statut Membre 6
     
    Bonjour,

    Merci pour ton message, je crois que ça marche, même si bizarrement mon algorithme prend 1.5s au lieu des 0.100s voulues...

    C'est bien juste de placer mon code à la place du while(i--) n'est ce pas ? J'obtiens bien au final la différence entre les deux temps pris par la clock non ?

    Ce 1.5s me perturbe...
    2
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. PClément Messages postés 9 Statut Membre 6
     
    bon, j'ai regardé encore un peu et décidement c'est mon code qui est trop lent :(

    Merci encore pour ces quelques lignes très utiles !
    2
  7. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    si le compilateur le permet, utiliser le profiling
    -p
        Generate extra code to write profile information suitable for the analysis program prof. 
    -pg
        Generate extra code to write profile information suitable for the analysis program gprof. 
    -a
        Generate extra code to write profile information for basic blocks, which will record the number of times each basic block is executed. This data could be analyzed by a program like tcov. Note, however, that the format of the data is not what tcov expects. Eventually GNU gprof should be extended to process this data. 
    -ax
        Generate extra code to read basic block profiling parameters from file `bb.in' and write profiling results to file `bb.out'. `bb.in' contains a list of functions. Whenever a function on the list is entered, profiling is turned on. When the outmost function is left, profiling is turned off. If a function name is prefixed with `-' the function is excluded from profiling. If a function name is not unique it can be disambiguated by writing `/path/filename.d:functionname'. `bb.out' will list some available filenames. Four function names have a special meaning: `__bb_jumps__' will cause jump frequencies to be written to `bb.out'. `__bb_trace__' will cause the sequence of basic blocks to be piped into `gzip' and written to file `bbtrace.gz'. `__bb_hidecall__' will cause call instructions to be excluded from the trace. `__bb_showret__' will cause return instructions to be included in the trace.
    2