IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Calculer le temps d'exécution sur d'un thread


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 21
    Par défaut Calculer le temps d'exécution sur d'un thread
    Bonjour à tous,

    Après quelques recherches infructueuses sur le net, me voilà pour une petite question sur les thread en C. J'ai créé un petit programme de simulation qui lance deux threads (j'utilise pthread) qui communiquent entre eux. J'ai besoin d'une com inter thread que je gère avec des pthread_cond_wait et pthread_cond_signal ... Bref tout ceci tourne bien.
    Seulement le soft que je simule a besoin de s'exécuter en un certain temps et j'aimerai donc savoir s'il est possible de mettre en début d'une fonction un timer qui va me comptabiliser UNIQUEMENT le temps d'exécution de ma fonction sur mon thread, et non le temps global d'un simple timer. Ou une méthode qui me récupère le 'temps thread' au lieu de l'heure du PC.
    En espérant ne pas avoir été trop brouillon dans mon explication, je vous remercie par avance.

  2. #2
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    un simple clock() peut faire l'affaire...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include "stdio.h"
    #include "time.h"
     
    /*..*/
     
    my_thread_func()
    {
        clock_t t = clock();
        /*..*/
        t = ((clock() - t) * CLOCKS_PER_SEC) * 1000;
        printf("Elapsed time : %d milliseconds\n", t);
    }
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 21
    Par défaut
    Si je cale ma fonction entre deux clock, j'aurais le temps d'exécution globale du processeur, donc la somme du temps qu'il a potentiellement passé sur l'autre thread. C'est justement là où ça me pose problème.

    L'idée est que la communication qui se fait entre les threads doit être fait dans un certain temps et que ce temps est dépassé quand je veux le calculer (en utilisant un gethrtime() par exemple).

    Autre précision, je suis sous Solaris OS.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Le programme prstat fournit ce niveau d'information avec l'option "-L".
    En regardant son source pour open solaris, ça pourra peut-être aider:
    http://richlowe.net/webrevs/il_713/u.../prstat.c.html

    Bon courage.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 21
    Par défaut
    Effectivement cela permet d'avoir des stats mais j'aurais besoin de ces calculs en temps réel et non à la fin de l'exécution.
    Je pense que je suis pas très clair dans ce que je dis, voici un peu plus de détail :
    Je récupère le code embarqué dans un appareil et je dois l'exécuter sur ma machine pour des besoins de simulation. Cela tourne sur deux processeurs sur l'appareil réel mais c'est simuler sur deux threads qui communiquent entre eux afin de s'échanger certaines variables. J'ai donc une séquence de Read et Write qui se fait chaque cycle du programme et que j'ai réussi à ordonner comme sur l'appareil réel avec la lib pthread. A ce niveau là, tout tourne bien.

    Le souci que j'ai, c'est que chaque read est sensé se faire en un certain temps (200µs). Je récupère donc le temps au début du read puis à la fin. Seulement entre temps, le processeur n'a pas que dérouler mon read mais a pu donné la main à l'autre thread et le temps d'exécution que je récupère est variable (ça va de 30µs à 250µs ...). Ce que je suppose, c'est que les temps d'exécution élevé correspondent aux moments où le processeur a passé la main.
    Je cherche donc une solution lme permettant de calculer le temps d'exécution uniquement de mon thread, ou un moyen de bloquer le processeur sur mon thread.

    PS : A noter que je ne suis pas du tout expert du sujet donc il se peut que je passe à côté de certaines évidences ou qu'il y ait des coquilles dans mon raisonnement.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Tinkh Voir le message
    Effectivement cela permet d'avoir des stats mais j'aurais besoin de ces calculs en temps réel et non à la fin de l'exécution.
    prstat donne justement des informations en temps réel sur les processus et leurs threads en cours d'exécution.

Discussions similaires

  1. [C++] Calcul du temps d'exécution
    Par Castagnems dans le forum C++
    Réponses: 7
    Dernier message: 12/01/2012, 12h46
  2. Calculer le temps d'exécution d'une requête
    Par BRAUKRIS dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 16/03/2007, 12h59
  3. Calculer le temps d'exécution d'un script
    Par pomgnon dans le forum C
    Réponses: 2
    Dernier message: 28/12/2006, 15h49
  4. Réponses: 3
    Dernier message: 11/03/2006, 15h35
  5. [C#] Calcul du temps d'exécution.
    Par lozzko dans le forum Windows Forms
    Réponses: 4
    Dernier message: 12/06/2005, 16h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo