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 :

lenteur calcul MPI


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 120
    Par défaut lenteur calcul MPI
    Bonjour.
    j'ai programmé un code parallèle avec la librairie MPI.

    quand j'ai exécuté le code sur 2 processeurs ;j'ai remarqué que le temps de calcul a augmenté au lieu de diminuer par rapport à 1 seul processeur.

    pour comprendre le problème ;j'ai enlevé toutes les communications et les synchronisations et Donc chaque processus va s'exécuter indépendamment de l'autre

    et la surprise est que le temps de calcul est toujours + grand sur 2 processeurs

    ça ne vient pas de l'initialisation ou la finalisation de MPI. c'est le coeur de calcul qui prend + de temps quand on travaille sur deux processeurs

    On dirait que les deux processus s'exécuteront chacun son tour sur un seul processeur !!!

    j'ai : Intel(R) Core(TM) i3 CPU -> double cœur (PC portable personnel )
    commande d'exécution : mpirun -np 2 ./programme

    Je ne sais pas vraiment ou ça vient le problème .quelqu'un pourrait m'aider?

    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Salut, peux-tu s'il te plait nous envoyer ton code (enfin juste la partie nécessaire) ?

    Merci

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 120
    Par défaut RE RE
    salut ;merci pour ta proposition d'aide

    en fait le code est très lent

    mais mon programme a cette forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ---> initialisation MPI,constantes physiques ,.....
     
         DO time=1, n_time_step
             time      =   time + dt
             call calcul()
             ! call communication()
        ENDDO
     
    ---> fin MPI,
    le reste est que de l'initialisation et autre choses. c'est la fonction calcul() qui prends du temps ( qui a comme outputs des grandeurs physiques calculés par des schémas de différence finis )

    entre 1 et 2 processus la fonction calcul() ne change pas et j'ai mis l'appel de la fonction communication() en commentaire pour tester

    Je peux mettre des autres résumés des parties mon code selon vos demandes.
    puis je savoir si mon programme utilise vraiment deux processeurs ? ( c'est une piste seulement ;je doute que ça vient de ça ).j'ai l'impression que le problème n'est pas numérique. c'est bizarre !! peut être qu'il faut mettre une option à mpirun (ou mpiexec)
    Je ne sais pas .ce sont que idées

    Merci

  4. #4
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2010
    Messages : 26
    Par défaut
    Salut,

    peux tu nous donner des précisions comme quelle version de MPI tu utilises ?

    peux tu également relancer ton code sur ta machine et faire un top (si tu es sous linux) et nous dire si ton processeur est à 100%.

    De combien est la différence entre une exécution sur un coeur et deux ?
    Quand tu exécutes sur deux coeurs, ton problème est-il diviser en deux ou c'est deux fois le même code de calcul qui est exécuté ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 120
    Par défaut RE RE RE
    bonjour ;merci pour ta proposition d'aide parce que j'ai toujours ce problème

    pour répondre à tes question alors :

    -j'utilise la librairie OpenMPI version 1.4.1
    - ci joint une capture d'écran pour le top : l'exécutable s'appelle 'programme'

    effectivement la plupart du temps j'ai des valeurs élevés 98 , 99 , 100 pour la consommation CPU

    mais cela n'explique pas le problème parce que chaque processeur exécute son code à lui indépendamment de l'autre ;non? peut être que c'est là le problème
    d'ailleurs quand j'exécute le code sur un seul processeur j'ai aussi presque 100 %

    - Je n'ai pas un calcul exacte du temps mais il y a une grande différence remarquable

    Pour estimer ; j'ai fait un test et donc le code sur un seul processeur prend 60 seconde et sur deux processeur il prend 180 secondes

    - pour ta dernière question ; quand je lance le code sur deux processeur alors le problème se divise en deux ;c'est le même code mais on divise en deux les domaine de calcul; c'est le principe du calcul parallèle
    Images attachées Images attachées  

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Salut,

    1) ton code est en fortran (et non en C++)
    2) le principe de MPI est de faire du calcul sur plusieurs ordinateurs donc rien ne garantira que ton CPU soit à 100 %
    3) j'ai moi aussi fait du MPI et la très très grande lenteur de mon programme venait des envois et réceptions des données qui étaient partagées entre les différents processus. Je m'explique, j'avais un paramètre N et je créais donc N processus (N = 200 environ). C'était de la folie car je passais 99.9 % du temps à créer les processus, et à attendre de toute envoyer / tout recevoir. J'ai donc créer que M processus (M == nombre de noeuds de ma grappe) mais j'envoyer bcp de données à la fois). Et là, l'exécution de mon programme était très très très rapide.

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 120
    Par défaut response
    salut ;

    J'ai dit que j'ai enlevé toute communication entre les deux processus
    oui le code est en fortran mais le problème ne concerne pas le langage mais MPI

    c'est normal que avec N=200 ça devient lent ;

    tu as dépassé les capacités matérielles de ta machine et donc tu gagneras rien en augmentant le nombre de processus

    mais moi je le fais tourner sur 2 processeurs seulement et ma machine est un double coeur

    cela peut venir de 100% de CPU que j'ai ? il présente quoi exactement ce pourcentage

    Merci

Discussions similaires

  1. [WD17] Problème lenteur calculs
    Par riad2108 dans le forum WinDev
    Réponses: 7
    Dernier message: 25/01/2014, 08h19
  2. Lenteur OpenMp + MPI
    Par arkerone dans le forum C
    Réponses: 1
    Dernier message: 27/03/2012, 09h52
  3. MPI calcul parallèle
    Par Darktrouble dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 17/04/2008, 14h47
  4. Problème de lenteur de calcul
    Par Fred4321 dans le forum Excel
    Réponses: 2
    Dernier message: 26/07/2007, 16h34
  5. Lenteur de codes de calcul
    Par uriotcea dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 27/03/2006, 09h54

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