Temps de calcul

Signaler
Messages postés
34
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
20 juin 2011
-
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
-
Bonjour,
si le vous plait j'ai une fonction qui permet d'extraire les points d'intérêt dans une image et je veux mettre un code ou bien une foction de c++ qui permet de donner le temps de calcul dans cette fonction, donc svp est ce qu'il y a quelqu'un qui a une idée.

merci

8 réponses

Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
Je te propose la classe suivante, qui répond à ton besoin (Linux seulement, pour Windows, il faut l'adapter):
#include 
#include <sstream>
#include <ctime>
#include <sys/time.h>

class ScopeElapsedTime
{
public:
  ScopeElapsedTime()
    : origin_("")
  {
    gettimeofday(&begin_, &tz_);
  }

  ScopeElapsedTime(const std::string& origin)
    : origin_(origin)
  {
    gettimeofday(&begin_, &tz_);
  }

  ~ScopeElapsedTime()
  {
    std::ostringstream buff;
    gettimeofday(&end_, &tz_);
    long time = (end_.tv_sec - begin_.tv_sec) *
      1000000L + (end_.tv_usec - begin_.tv_usec);
    if (!origin_.empty())
      buff << "[" << origin_ << "]";
    buff << "Elapsed time: " << time << " us" << std::endl;

    std::cout << buff.str();
  }

private:
  std::string origin_;
  struct timeval begin_, end_;
  struct timezone tz_;
};

void fonction()
{
  ScopeElapsedTime timer("Fonction"); // Calcul le temps que met la fonction à s'exécuter
}

void autreFonction()
{
  ScopeElapsedTime timer("AutreFonction"); // Calcul le temps que met la fonction à s'exécuter
}


int main()
{
  ScopeElapsedTime timer("Application"); // Temps mis par l'application en entière
  fonction();

  {
    ScopeElapsedTime timer("Les Deux"); // Calcul du temps mis pour les fonctions englobées, pour s'exécuter.
    fonction();
    autreFonction()
  }
  return 0;
}


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
34
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
20 juin 2011

Merci
mais justement je travail sous windows comment je dois l adapter
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
Il te faut utiliser l'équivalent de gettimeofday pour Windows. Il me semble que c'est à base de "QueryPerformanceCounter".
Un lien intéressant:
http://forum.hardware.fr/hfr/Programmation/C-2/gettimeofday-sous-sujet_83723_1.htm

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
793
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
10 février 2021
8
Bonjour,
si tu es sous .NET en plus (d'après la rubrique), il y a des objets du type System.Diagnostics.Stopwatch :
http://msdn.microsoft.com/...

avec un exemple

louis
Messages postés
34
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
20 juin 2011

j'ai utilisé la fonction difftime et GetTickCount() , mais je ne comprend pas pour quoi le temps d'execution change chaque fois , alors que le code est le meme; en plus ce n'est pas le meme sous Linux ?
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
Le temps ne peut jamais être toujours le même. Il y a toujours un écart de quelques microsecondes.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
34
Date d'inscription
mercredi 3 juin 2009
Statut
Membre
Dernière intervention
20 juin 2011

Oui mais pour quoi,surtout quand je refais l’exécution (sans compiler ) ça diminue et tends pratiquement à s'annuler
d autre part j'ai remarqué que ça l air plus lent par rapport a l exécution sous Linux
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
Oui mais pour quoi,surtout quand je refais l’exécution (sans compiler ) ça diminue et tends pratiquement à s'annuler

Aucune idée. Est-ce que Windows ne mettrais pas ton binaire en cache, parce qu'il s'est aperçu que tu l'utilisais souvent ? C'est une optimisation qui expliquerait ce comportement.

j'ai remarqué que ça l air plus lent par rapport a l exécution sous Linux

Tu n'as peut être pas compilé avec le même compilateur, ou avec les mêmes options de compilation.

Je ne suis pas un expert Windows, loin de là, mais il me semble que "GetTickCount" est bien moins fiable que "QueryPerformanceCounter".

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question