Partage
  • Partager sur Facebook
  • Partager sur Twitter

évaluer le temp d'exécution d'une fonction

    16 juin 2006 à 19:03:47

    bon je me suis fait un fonction un peu barbare et je voudrais évaluer le temps quel mets pour s'exécuté, j'ai donc pensé a utilisé la SDL, mais comme c'est un projet en console ca marche pas trop, alors j'ai decidé de faire avec la librairie time.h, mais je me suis rendu compte que la fonction time nous renvoi uniquement le timestamp, donc c'est en seconde et ça va pas pour mesurer le temps entre 2 intervalle très cour. Je voudrais savoir si il existe une fonction en C identique a celle existant en php qui me renvoi le timestamp + les milliseconde ( [PHP] micro_time(); ou un truc dans le genre )
    • Partager sur Facebook
    • Partager sur Twitter
      16 juin 2006 à 19:11:22

      Execute n fois ta fonction en boucle et divise le temps que tu trouve par n. Avec cette méthode tu peux je pense te permettre de calculer le temps d'éxecution sur plusieurs secondes avec un chrono... enfin ce n'est qu'une idée parmis d'autre.
      En tout cas sache que si tu cherche à calculer le temps que met une fonction pour s'executer une fois, l'ordinateur ne pourra pas te donner de valeur < 10ms.
      • Partager sur Facebook
      • Partager sur Twitter
        16 juin 2006 à 19:48:01

        Très bonne idée! Il y aurait aussi une autre façon, c'est avec la fonction
        de "windows.h" nommée "GetTickCount()", qui renvoit le nombre de milli-secondes
        depuis (je crois) le démarrage du OS... Mais c'est vrai qu'avec un test inférieur à une vingtaine de millisecondes, le résultat sera un peut imprécis. On peut toujours faire une boucle de ce genre, un peut tordue mais...


        int a = GetTickCount();
        int b;

        for (b = 0; GetTickCount() - a < 1000; b++)
        {
        //exécuter ici la fonction!
        }
        //afficher avec printf ou cout la valeur de b...

        Ça retourne donc dans "b" le nombre de fois dans la seconde que la fonction s'est déroulée...
        • Partager sur Facebook
        • Partager sur Twitter
          16 juin 2006 à 19:53:45

          j'ai teste avec GetTickCount(); et ca me renvoi le nombre de seconde merci quand meme
          • Partager sur Facebook
          • Partager sur Twitter
            16 juin 2006 à 23:20:36

            Tu ne pourras pas avoir de valeur précise en éxécutant une seule fois la fonction...
            En tout cas GetTickCount renvois bien une valeur en ms et pas en secondes.

            Testé avec ce code ( issu d'un autre topic je fais plein de choses en même temps :p ) :


            #include <stdio.h>
            #include <stdlib.h>
            #include <windows.h>
            #define NB 100000000

            long addition(char tableau[], long tailleTableau);


            int main(int argc, char *argv[])
            {
                char tableau[6] =
                    {
                        10, 22, 55, 33, 66, 67
                    };

                long resultat1 = 0;
                double a = GetTickCount();
                double b;

                for (b = 0; b<NB; b++)
                {
                    resultat1 = addition(tableau , 6);
                }

                b=GetTickCount();

                printf("%lf ms pour %ld iterations\n",(b-a),NB);
                printf("%lf ms pour une fonction",(b-a)/NB);
                return 0;
            }

            long addition(char tableau[], long tailleTableau)
            {
                long resultat = 0, i = 0;

                for (i = 0; i < tailleTableau ; i++)
                {
                    resultat += tableau[i];
                }

                return resultat;
            }



            Le problème avec ton code Mikahell c'est que tu fait des milliers d'appels à la fonction GetTickCount qui prend un temps non négligeable sur la totalité je pense. Apres vérification j'obtiens un temps par fonction 25% plus élevé qu'avec mon code. L'impact à l'air plutot important.

            La boucle tournant a vide pour tester l'impacte du for on obtient une erreur sur la valeur finale d'environ 2% du temps obtenu par fonction.
            • Partager sur Facebook
            • Partager sur Twitter

            évaluer le temp d'exécution d'une fonction

            × 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