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 :

temps d'execution d'un programme multithread


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut temps d'execution d'un programme multithread
    Salut à tous,

    J'ai du créer pour mon boulot, un petit programme de calcul de facteur de forme. En gros, c'est un quadruple intégrale. C'est simple à écrire, mais long à calculer.

    Dans un but complètement ludique et absolument pas pratique, j'ai modifié mon programme pour le transformer en programme multithread. Le but étant d'apprendre à tirer partit d'un pc double coeur. Ce qui n'est pas très utile à mon programme, mais pas mal pour mon avenir.
    Les 2 programmes tournent parfaitement et fournissent les mêmes résultats. C'est au niveau du temps d'execution que je me pose quelques questions.


    En les faisant tourner sous des machines différentes, j'ai remarqué 3 choses auquels j'aimerias bien avoir une réponse:

    Sur les PC monocore, le programme multithread (MT) met plus de temps à s'éxécuter. (de 10 à 15% plus de temps). Je me l'explique bien, mais si quelqu'un a une iddée pour réduire cette écart je suis preneur.

    Sur un p4 avec HT j'obtient le plus mauvais score, avec un écart de 25%, alors qu'il est censé tourné mieux dans ce cas. J'aimerais bein avoir une explication la dessus.

    Mon dernier problème et celui qui me fait poser le plus de question est le suivant. Sur un Core Duo j'obtient un score de 168 secondes pour le programme normal et 63 secondes pour le programme MT. Soit un gain de 167% . Je m'attendais bien à un gain, mais certainement pas supérieur à 100%. Ca j'aimerias bien qu'on me l'explique.


    Le programme utilise des pthread et est compilé sous devC++. Le tout est écrit en C. Les thread sont implanté dans la 1ere boucle (=1ere intégrale) qui éxécute les 3 autres intégrales, chaque itération étant totalement indépendante des autres (ce qui a rendu la modification MT possible). Le résultat des boucles est sommé dans un variable protégée par un mutex. Je ne met pas mon code source vu qu'il fait 300 lignes, pas la peine de polluer le forum.

    Si quelqu'un peut avancer une explication à l'une de ses interrogations (surtout la 3ème) je l'en remercie d'avance.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Si je comprends bien tes 3 machines sont identiques à la différence du processeur ?

    Les chiffres que tu donnes c'est une moyenne que tu as fais pour 100/200/1000 tests ?
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Elles sont toutes basées sur XP (pro) ou windows 2003. Pour le reste l'architecture varie pas mal. On a des machines de tout age. Ca va du Celeron pIII (on est pas riche au boulot ) au Core Duo.

    Les programmes ont tournés de 1 à 2 fois sur la machines des autres à beaucoup de fois sur la mienne (celeron pIII ). Les temps sont toujours très proches à 1 ou 2 secondes près. Y a que le test sur le P4 que j'ai pas pu surveillé, les autres je les ai eu à l'oeil. C'est pour ca, le pIV c'est quand même à vérifier. Le probleme c'est le gain sur le Core duo.
    (avec 4 minutes par execution sur ma vieille bécanne, je peux pas en faire tourner 100 lol)

    J'ai tout mis en écart relatifs pour s'affranchir des puissance des machines.



    Seulement là je suis en train de réaliser que le core duo a mis 168 secondes sur le programe en mono, et le pIV a 3.2 en a mis 107. Y a un soucis ...
    Ce qui est étonnant c'est que rien n'a tourné pendant ce temps, j'avais ouvert le gestionnaire de taches, et il plafonnait à 50%. Donc rien n'a tournée sinon le 2eme core aurrait tournée et je l'aurrais vu. Ca va redemandé un autre essai quand même ...

Discussions similaires

  1. Temps d'execution d'un programme
    Par rutabagas dans le forum Lisp
    Réponses: 8
    Dernier message: 24/12/2007, 17h41
  2. Réponses: 6
    Dernier message: 27/07/2007, 19h38
  3. Temps D'execution D'un Programme
    Par hamska2 dans le forum C
    Réponses: 14
    Dernier message: 09/05/2007, 19h14
  4. Réponses: 5
    Dernier message: 19/06/2006, 23h54
  5. temps d'execution d'un programme
    Par Invité(e) dans le forum C
    Réponses: 8
    Dernier message: 17/05/2006, 14h12

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