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 :

question simple mais consistante à propos de mpi


Sujet :

C++

  1. #1
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut question simple mais consistante à propos de mpi
    bonjour tout le monde,
    voila la question
    est ce que la parallélisation avec MPI ,d'une application qui s'exécute en 15 secondes ou 20 secondes est bénéfique ou au contraire elle est pénalisante,
    parceque j'ai utilisé MPI pour la prallélisation de mon application qui dure 15 ou 25 secondes, j'ai pas gagnédu temps d'exécution,
    en fait même l'initialisation de mpi dure 1,4 secondes
    alors qu'est ce que vous penez?
    merci

  2. #2
    Membre éclairé
    Avatar de Le Farfadet Spatial
    Homme Profil pro
    En cours de précision…
    Inscrit en
    Avril 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : En cours de précision…

    Informations forums :
    Inscription : Avril 2008
    Messages : 190
    Par défaut
    Salut à tous !

    C'est complètement dépendant du code. Après, il faut savoir ce que tu entends par bénéfique. Si c'est pour gagner du temps d'exécution, certains codes, même s'ils ne s'exécutent qu'en 15 ou 20 secondes seront plus performants si la parallélisation est bien faite. D'autre seront plus lents, car peu parallélisables et alors on perd du temps à synchroniser les processus. En tout cas, il faut savoir que ce n'est pas parce qu'on utilise MPI que ça va plus vite : il faut aussi que la parallélisation soit bien faite. Il y a donc un problème d'algorithmique parallèle derrière, ainsi qu'une question de qualité de la programmation (le parallélisme peut être un peu déroutant au début).

    Si la question était : est-ce que ça a un intérêt, ça dépend. Si ton exécution de 15 à 20 secondes est un test, mais que le code doit mettre plus de temps dans le cas réel, oui, ça peut être utile. Si cette exécution de 15 secondes est un cas normal, alors il y a probablement peu d'intérêt à paralléliser ton code (si l'objectif de la parallélisation est de gagner du temps d'exécution).

    À bientôt.

    Le Farfadet Spatial

  3. #3
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    en fait, c'est pas un test, c'est mon programme qui prends 15 ou 25 secondes de temps d'exécution, et mon but c'est de gagner sur le temps d'exécution,
    j'ai en fait 90 send et 90 recv , et à part le temps des envoies et réception, j'ai une petite partie de code dans le même programme (calcul qui ne nécessite pas de communication) ce bout de code prends en séquentiel 0,30 secondes, et en parallèle sur plusieurs processus, ça prend 1,4 secondes.

    j'ai pas vraiment pas gagner du tout.
    autre chose, si j'augmente le nombre de processus ça n'améliore pas mais à l'inverse, ça dégrade.
    pourvez vous me clarifier ce qui se passe.
    merci d'avance

  4. #4
    Membre éclairé
    Avatar de Le Farfadet Spatial
    Homme Profil pro
    En cours de précision…
    Inscrit en
    Avril 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : En cours de précision…

    Informations forums :
    Inscription : Avril 2008
    Messages : 190
    Par défaut
    Salut à tous !

    Citation Envoyé par fatjoe Voir le message
    autre chose, si j'augmente le nombre de processus ça n'améliore pas mais à l'inverse, ça dégrade.
    pourvez vous me clarifier ce qui se passe.
    Ce n'est pas très surprenant. Pour un tel code, je ne pense pas que c'est dans le parallélisme que tu trouveras de quoi gagner en temps d'exécution.

    Il est un peu difficile de parler dans le vide, sans vraiment savoir ce que tu veux faire. Cela dit, il faut voir qu'il existe un nombre de processus optimal, qui est fonction du nombre de processeurs, de l'algorithme et du système. De plus, les phases de communication et de synchronisation entre processus sont toujours délicates. En fait, trouver la bonne répartition est généralement un problème difficile (NP-complet). Généralement, on aborde ces problèmes à l'aide de la théorie des graphes.

    Voilà pour parler de manière très générale et un peu dans le vide (et aussi de manière un peu fumeuse). Après, il faut voir ton problème particulier, peut-être est-ce plus simple, je ne sais pas. C'est difficile de parler sans savoir ce que tu veux faire. En tout cas, le mieux est en général de faire un processus par processeur --- ou cœur de processeur, ce qui revient au même, --- sinon on a tendance à les surcharger, en tout cas on perd du temps pour la synchronisation. À tempérer légèrement avec le fait que les processeurs sont désormais superscalaires, mais c'est une bonne première approximation.

    Cela dit, puisque j'en suis dans les généralités : le parallélisme, c'est l'avenir. Cependant, cela pose des problèmes complexes (par exemple la répartition optimale de la charge de calcul). De plus, ce n'est pas la panacée. Généralement (même s'il existe des cas particuliers), il ne faut pas espérer de meilleures performances en parallélisant une procédure qui dure moins de trente secondes.

    Si ce que tu recherches ce sont uniquement les performances --- peut-être as-tu un système client-serveur ou que sais-je, auquel cas c'est autre chose --- la première vraie question à se poser est : est-ce que mon cas vaut vraiment la peine de tenter des bricolages longs et compliqués, qui mettent à mal la validité du code, pour gagner quelques cycles ? De toute façon, il faut d'abord et avant tout réfléchir à l'algorithme : le simple fait de passer de O(n²) à O(n log n) est source d'un gain de performances considérable.

    Donc : réfléchit déjà à tes algorithmes.

    À bientôt.

    Le Farfadet Spatial

  5. #5
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    merci vraiment pour votre réponse,
    mais vous m'avez pas répondu à propos du bout de code séquentiel,
    qui prend plus de temps d'exécution si je l'exécute sur plusieurs processus.
    merci

  6. #6
    Membre éclairé
    Avatar de Le Farfadet Spatial
    Homme Profil pro
    En cours de précision…
    Inscrit en
    Avril 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : En cours de précision…

    Informations forums :
    Inscription : Avril 2008
    Messages : 190
    Par défaut
    Salut à tous !

    Citation Envoyé par fatjoe Voir le message
    mais vous m'avez pas répondu à propos du bout de code séquentiel,
    qui prend plus de temps d'exécution si je l'exécute sur plusieurs processus.
    Encore une fois, je ne peux pas vraiment répondre sans savoir de quoi on parle...

    Cela dit, lorsqu'on lance un processus, même léger, il y a toute une mécanique qui se met en place. Ça n'est pas instantané, notamment pour la mise en place du contexte d'exécution. De plus, pour peu qu'on ait beaucoup plus de processus que de processeurs, ils sont mis en attente le temps que les ressources se libèrent, ce qui prend encore un délai. Bref, ça n'est pas vraiment surprenant, mais je ne sais pas exactement ce qui se passe dans votre cas.

    À bientôt.

    Le Farfadet Spatial

  7. #7
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    meric encore une fois,
    j'ai fait l'exécution sur mon pc (core duo,2 Go de ram)(donc processus au lieu de processeurs)
    et j'ai fait sur un réseau(Pentium 4, 512 de ram) j'ai trouvé que sur mon pc le temps d'exécution est bien meilleur.
    est ce que c'est normale?

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Par défaut
    Salut,

    Comme le dit très bien Le Farfadet Spatial, on ne peut pas parler de parallélisation dans l'abstrait. Soit ton algorithme est bien parallèlisable : opérations, calculs, etc, couteux en terme de temps et indépendant les uns des autres jusqu'à un certain point, et dans ce cas là répartir le travail est utile, mais si c'est pour distribuer des taches très simples à plusieurs processeurs aucun intérêt.

  9. #9
    Membre éclairé
    Avatar de Le Farfadet Spatial
    Homme Profil pro
    En cours de précision…
    Inscrit en
    Avril 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : En cours de précision…

    Informations forums :
    Inscription : Avril 2008
    Messages : 190
    Par défaut
    Salut à tous !

    Je ne le fais pas dire à Manpe !

    Citation Envoyé par fatjoe Voir le message
    j'ai fait l'exécution sur mon pc (core duo,2 Go de ram)
    Core 2 ou Core ? Si c'est un Core 2, alors c'est au moins un bi-cœurs. Sinon, effectivement, c'est un mono-cœur.

    Si ce n'est qu'un mono-cœur, alors ses capacités de parallélisme sont limitées, quoiqu'il en a, dans une certaine mesure, vu que c'est un processeur super-scalaire. Cela dit, sur un mono-cœur, c'est une mauvaise idée de lancer plusieurs processus dans l'espoir de gagner du temps d'exécution : en effet, les changements de contextes vont être rédhibitoires. Au contraire, un code séquentiel sera souvent plus performant, car le compilateur saura tirer partie des particularités des processeurs super-scalaires de manière très efficace et sans le sur-coût dut au contexte d'exécution.

    et j'ai fait sur un réseau(Pentium 4, 512 de ram) j'ai trouvé que sur mon pc le temps d'exécution est bien meilleur.
    est ce que c'est normale?
    Peut-être, c'est bien possible. En tout cas, ce n'est pas surprenant. Déjà, il faudrait savoir ce que veut dire « j'ai fait sur un réseau(Pentium 4, 512 de ram). »

    Est-ce que cela signifie que le programme a été testé sur un réseau constitué de Pentium 4 ? Et combien ? Tout simplement, le code n'est peut-être pas parallélisable.

    Est-ce que cela veut dire que le programme a été testé en mettant en réseau l'ordinateur cité au début du message et un Pentium 4 ? Dans ce cas, il faut savoir que dans un réseaux hétérogène, les performances sont minorées par le plus lent des processeurs, à savoir dans ce cas le Pentium 4. Je ne suis pas surpris qu'un Pentium 4 aille moins vite qu'un Core... Avec l'échange des messages et la synchronisation, sachant qu'on parle d'un code qui, en séquentiel, prend une vingtaine de seconde, il faut s'attendre à ce que toute l'artillerie mise en place prenne plus de temps que le code lui-même. Sans parler du risque de surcharger le réseau, tout simplement.

    Encore une fois, pourquoi ne pas parler plus avant du code en question ? Cela facilitera tellement la tâche.

    À bientôt.

    Le Farfadet Spatial

  10. #10
    Membre éclairé
    Avatar de Le Farfadet Spatial
    Homme Profil pro
    En cours de précision…
    Inscrit en
    Avril 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : En cours de précision…

    Informations forums :
    Inscription : Avril 2008
    Messages : 190
    Par défaut
    Re-salut à tous !

    Comme visiblement il va être difficile d'avoir des renseignements sur le code, je propose une petite bibliographie pour approfondir le sujet du parallélisme :

    Arnaud LEGRAND et Yves ROBERT, Algorithmique parallèle, Dunod.

    Andrew TANNENBAUM, Réseaux, Pearson Education.

    Andrew TANNENBAUM, Marteen VAN STEEN, Distributed Systems, Pearson Education.

    Il y a également un excellent chapitre sur la parallélisation dans cet ouvrage :

    Dick GRUNE, Henri E. BAL, Ceriel J.H. JACOBS et Koen G. LANGENDOEN, Compilateurs, Dunod.

    À bientôt.

    Le Farfadet Spatial

  11. #11
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    en fait c'est trop compliqué mon programme,
    il fait de reconnaissance de formes, en fait il distribue chaque forme vers un processeur, à la fin de la reconnaissance, chaque processeur renvoi le résultat vers le root.
    j'ai une partie de code non parallélisable
    chauque processeur le refait
    elle dure 0,3 seconde en séquentiel mais en cas du distribué elle prends 1,4 secondes et meme plus si l'image à reconnaitre est grande.
    en cas ou j'augmente les processeurs, le temps d'exécution augmente aussi
    pour l'envoi d'utilise MPI_Isend
    et pour la réception MPI_Recv

    merci pour tous

  12. #12
    Membre éclairé
    Avatar de Le Farfadet Spatial
    Homme Profil pro
    En cours de précision…
    Inscrit en
    Avril 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : En cours de précision…

    Informations forums :
    Inscription : Avril 2008
    Messages : 190
    Par défaut
    Salut à tous !

    Citation Envoyé par fatjoe Voir le message
    en fait c'est trop compliqué mon programme,
    Certainement, mais avoir des informations dessus n'est pas un luxe !

    il fait de reconnaissance de formes, en fait il distribue chaque forme vers un processeur, à la fin de la reconnaissance, chaque processeur renvoi le résultat vers le root.
    Ah ! En effet, si le traitement de chaque forme est indépendant des autres, alors il peut être pertinent de paralléliser le code.

    j'ai une partie de code non parallélisable
    chauque processeur le refait
    elle dure 0,3 seconde en séquentiel mais en cas du distribué elle prends 1,4 secondes et meme plus si l'image à reconnaitre est grande.
    en cas ou j'augmente les processeurs, le temps d'exécution augmente aussi
    Processeurs ou processus ?

    Après, il y a tout le mécanisme de synchronisation à prendre en compte, ainsi que la mise en place du contexte. Si tout cela est fait sur un nombre de processus plus important, voir vraiment plus important, que le nombre de processeurs, alors on risque de voir apparaître un goulot d'étranglement supplémentaire.

    Pour compléter ma bibliographie, au sujet de l'architecture des ordinateurs (que peut-on faire avec un processeur) :

    Andrew TANNENBAUM, Structured Computer Organization, Pearson Education.

    Des références sur la théorie des graphes :

    Claude BERGE, Graphes, Gauthier-Villars.

    Claude BERGE, Hypergraphes, Gauthier-Villars.

    À bientôt.

    Le Farfadet Spatial

  13. #13
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    en fait je fait la simulation sur mon pc avec MPICH
    alors on parle de processus

    et si je fait sur un réseau alors processeurs
    pour le réseau(LAN) c'est toujours non bénéfique
    j'ai opté pour la simulation car c'est plutôt bénéfique
    à partir de 4 processus ça dégrade

Discussions similaires

  1. Question simple mais piège
    Par wafiwafi dans le forum Langages de programmation
    Réponses: 18
    Dernier message: 21/08/2009, 14h37
  2. Question simple à propos des USE CASE
    Par foufar2009 dans le forum Cas d'utilisation
    Réponses: 3
    Dernier message: 01/06/2009, 15h51
  3. question à propos de MPI
    Par fatjoe dans le forum C++
    Réponses: 1
    Dernier message: 24/06/2008, 16h05
  4. question simple a propos de QDialog
    Par elmcherqui dans le forum Qt
    Réponses: 4
    Dernier message: 24/05/2008, 23h13
  5. Question simple mais vitale : index unique
    Par Commandant dans le forum Sybase
    Réponses: 2
    Dernier message: 20/12/2006, 20h08

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