Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonctionnement de utime=>times()

Pour chronométrer un algo

    4 mai 2006 à 22:48:39

    J'ai fais un algorithme et j'aimerais bien voir très précisement combien de temps prend celui ci pour faire son petit boulot.
    J'aimerais me baser sur le champs utime de la fonction times() car j'ai entendu dire que celà permettait de connaitre le nombre de cycle qu'effectuait le processeur ou un truc du genre, ce qui permettait d'avoir une valeur concrète qu'importe le processeur sur lequel on ferait tourner l'algo.
    Bref, si quelqu'un l'a déja utilisé, ce serait sympa de me dire comment ça marche.
    • Partager sur Facebook
    • Partager sur Twitter
      5 mai 2006 à 8:16:30

      Bah ça marche comme l'indique la doc, tu reçois une structure dont le membre tms_utime est le temps en ticks qu'a consommé ton programme en mode utilisateur et voilà. Pour obtenir un équivalent en secondes, tu dois passer par sysconf(_SC_CLK_TCK) mais tout ça est expliqué dans le man.
      • Partager sur Facebook
      • Partager sur Twitter
        6 mai 2006 à 19:50:28

        Dans time.h, on a cette structure de déclaré :
        struct tms {
                      clock_t tms_utime;  /* user time */
                      clock_t tms_stime;  /* system time */
                      clock_t tms_cutime; /* user time of children */
                      clock_t tms_cstime; /* system time of children */
               };


        ... et le proto de la fonction qui prend en argument cette structure :
        clock_t times(struct tms *buf);


        J'ai donc déclaré une nouvelle structure :
        struct  tms *temps;


        puis j'appelle la fonction times :
        times(struct tms *temps);


        Puis je recupère dans un long, la valeur du champs utime :
        dep=temps->tms_utime;


        je compile avec gcc mais la compile plante à l'appel de la fonction times() :
        sudo.c:33: error: erreur d'analyse syntaxique before "struct"


        Je ne vois pas du tout ce qui ne va pas. Merci de me dépanner.

        • Partager sur Facebook
        • Partager sur Twitter
          6 mai 2006 à 21:13:36

          Deux choses : On se documente avec le man, pas en ouvrant le header comme un bourrin et deuxième chose : révise ton C. Depuis quand on appelle une fonction avec une syntaxe de déclaration ? Sinon, de toute manière tu déclares un pointeur, ce qui est pas très logique car où est-ce que tu alloues la mémoire pour cette structure ? Autant déclarer une structure automatique (sans allocation dynamique).
          • Partager sur Facebook
          • Partager sur Twitter
            6 mai 2006 à 22:45:12

            et n'oublie pas: la fonction renvoti un clock_t :)
            • Partager sur Facebook
            • Partager sur Twitter
              7 mai 2006 à 0:58:27

              La fonction times() ne veut pas autre chose qu'un pointeur, sinon la compile ne passe pas en me sortant que le type n'est pas compatible.
              J'aimerai avoir le temps en ticks que prend l'algo à se résoudre. J'ai donc appeler la fonction time avant et après, puis j'ai fais la différence et j'ai multiplié ça par le nombre de ticks par milliseconde pour avoir le nombre de cycle total. Quand je ne multiplie pas la différence par 'ratio', j'ai des valeurs qui varient de 10 à 15 ce qui doit être le nombre de milliseconde non ? Pour obtenir le nombre de ticks, je multiplie par 'ratio' la différence, mais alors, je n'obtiens que des '0' comme resultats.


                float dep;
                float arr;
                float ratio=sysconf(_SC_CLK_TCK)/1000; /*transforme le nb de ticks par seconde en nb de ticks par milliseconde*/
                struct  tms *temps;
                 
                times(temps);
                dep=temps->tms_utime;

                affiche(sudoku);
                resolve(sudoku);
                affiche(sudoku);

                times(temps);
                arr=temps->tms_utime;
               
                printf("Nombre de ticks : %f\n",(arr-dep)*ratio);


              9 0 0 0 0 0 0 0 0
              6 0 0 0 0 0 3 2 1
              0 5 1 0 0 0 0 0 9
              0 0 0 6 0 0 0 0 0
              0 2 0 1 7 0 0 0 0
              0 0 0 9 5 0 0 0 4
              0 4 0 0 9 0 0 0 6
              8 0 7 0 0 3 0 0 0
              1 3 9 8 6 0 0 0 2

              120504 cases ont été traitées
              9 8 3 2 1 6 5 4 7
              6 7 4 5 8 9 3 2 1
              2 5 1 3 4 7 6 8 9
              7 9 5 6 3 4 2 1 8
              4 2 6 1 7 8 9 5 3
              3 1 8 9 5 2 7 6 4
              5 4 2 7 9 1 8 3 6
              8 6 7 4 2 3 1 9 5
              1 3 9 8 6 5 4 7 2

              Nombre de ticks : 0.000000
              • Partager sur Facebook
              • Partager sur Twitter

              Fonctionnement de utime=>times()

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown