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

Programmation parallèle, calcul scientifique et de haute performance (HPC) Discussion :

Paralléliser une application en C++


Sujet :

Programmation parallèle, calcul scientifique et de haute performance (HPC)

  1. #1
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Points : 67
    Points
    67
    Par défaut Paralléliser une application en C++
    bonjour,
    je cherche la procédure pour commencer à paralléliser une application en c++, en utilisant MPI
    en fait, ya plein de petit exemples mais je sais pas d'oû je doit commencer pour mon application
    je commence par la fonction main() ?
    merci d'avance

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Resalut.
    Tu trouvera pas mal de chose ici dont des tutorial
    http://en.wikipedia.org/wiki/Message_Passing_Interface
    Que cherche tu as faire exactement?

  3. #3
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Points : 67
    Points
    67
    Par défaut
    c'est vrai mais toujours de petit exemples, pas de procédure ou bien une petite application comme exemple.

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par fatjoe Voir le message
    c'est vrai mais toujours de petit exemples, pas de procédure ou bien une petite application comme exemple.
    C'est un bon début pour comprendre, non?
    essaie de faire discuter deux appli différente par exemple.
    Qu'es que tu veut faire avec? (c'est pour t'orienter)

  5. #5
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Points : 67
    Points
    67
    Par défaut
    en fait j'ai une application à paralléliser, je sais pas comment commencer et quelle sont les parties que je doit pas les paralléliser

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Pour MPI,
    essaie de petit programme pour commencer. Genre les tutorial pour comprendre comment cela fonctionne et surtout à quoi ça sert.

    Ensuite pour ton applie (je suppose que ce n'est pas toi qui la faite), commence par voir comment elle est structuré (fait un schéma de class par exemple).
    Ensuite regarde ce qui doit être parallélisée. Et découpe ces zones en module indépendant.

    Essaie d'utiliser MPI pour exécuter ces "module indépendant " sur différente machine.

    Juste pour être sur, ce que tu veut faire c'est de la parallélisation entre ordinateur (MPI) ou sur processeur (OpenMP)

  7. #7
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Points : 67
    Points
    67
    Par défaut
    premièrement merci pour votre aide,
    secondo l'application c'est moi qui la fait mais je sais pas ça change quoi?
    troisièmement ce que je voudrais faire c'est de la parallélisation entre ordinateur (MPI)

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par fatjoe Voir le message
    secondo l'application c'est moi qui la fait mais je sais pas ça change quoi?
    Ben tu n'as pas a décortiqué la structure du programme c'est déjà ca de gagné
    Citation Envoyé par fatjoe Voir le message
    troisièmement ce que je voudrais faire c'est de la parallélisation entre ordinateur (MPI)
    Essaie de voir ce que je t'ai dit. Faut que tu définisse ce qui est parallélisable dans ton code.

    J'ai trouvé ca :
    http://people.scs.fsu.edu/~burkardt/...c/mpi/mpi.html

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    en gros ce qui est parallelisable facilement c'est :

    • les boucles
    • les traitements independants successifs
      (exemple : A = B*C, D=B+3*C/2 (si par exemple A,B,C,D sont des matrices)
      (par contre : A = B*C et D=A+3*C/2 n'est parallelisable qu'en partie (chaque operation separee)).
      (pareil pour les boucles : si l'iteration i+1 se sert de i, difficile a paralleliser...)


    En gros, il y a 3 instructions de base :

    • demarrer le parallelisme
    • synchroniser
    • finir

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Salut,
    il y as une personne qui connaît MPI
    http://www.developpez.net/forums/sho...d.php?t=474338
    Tu peut peut être lui demander de l'aide?
    pour de la doc

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 180
    Points : 65
    Points
    65
    Par défaut
    Bonjour,

    Je t'invite à aller voir ce lien là :

    http://www2.lifl.fr/west/courses/cshp/mpi.pdf

    qui présente entre autre une parallélisation d'un calcul d'intégrale.
    J'ai commencé MPI il y a peu, mais en gros il y a toujours une structure de base à mettre dans chaque programme, qui est à peu de chose près :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    int main(int argc, char* argv[])
    {
    	int my_rank;
    	int p; // nombre de processeurs
    	int N; // nombre de simulations
    	int N_local; // nombre de simulations pour chaque processeur
    	int source;
    	int dest=0; // c'est le proc 0 qui prend tout 
    	int tag=0;
    	MPI_Status status;	
     
    	/* Déclaration des fonctions*/
    	// inutile, je les ai declarees avant le main
     
     /* A mettre dans chaque début programme MPI*/		
    	MPI_Init(&argc,&argv);
    	MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);
    	MPI_Comm_size(MPI_COMM_WORLD,&p);
     
    /***********************************************/
    /* ICI TU METS LE PROGRAMME QUE FERA CHAQUE PROCESSUS*/
    /***********************************************/
     
     /* A mettre dans chaque fin programme MPI*/
    	MPI_Barrier(MPI_COMM_WORLD);
    	MPI_Finalize();
     
    return 0;
    }

    et les processus s'échangent les données via les fonctions :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MPI_Send(&donnee,1,MPI_DOUBLE,dest,tag,MPI_COMM_WORLD);
    // et :
    MPI_Recv(&donnee,1,MPI_DOUBLE,source,tag,MPI_COMM_WORLD,&status);

    En gros ça c'est la base de MPI, tu retrouveras toujours ces fonctions là.
    Après, il faudra que tu sois plus précis sur le programme que tu veux paralléliser, parce que certains sont simples à faire, d'autres demandent bien plus de réflexion.

    Enfin, il est bien de faire avant le programme en séquentiel, et quand tu es sur que ça marche, le paralléliser.

  12. #12
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour à tous,

    Voici quelques pistes :
    Des cours de supelec Metz sur MPI et OpenMP
    http://www.metz.supelec.fr/metz/pers...CPDG/index.htm

    Ceci est un autre lien pour comprendre MPI, mais en fortran.
    Je le mets en lien car il explique concrétement le fonctionnement des fonctions les plus utilisées en MPI.
    http://www.idris.fr/data/cours/paral...choix_doc.html

    Le travail préparatoire pour parallèliser une application, c'est de trouver les dépendances entre les données. Je te conseil de faire un schéma.
    Après celà, tu pourras établir un graphe de dépendance des données.
    Il te restera plus qu'à synchroniser les données qui doivent l'etre avec des MPI_Wait, MPI_Senc, MPI_Recv, ...

  13. #13
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Bonjour et bien venu sur le forum.
    Merci beaucoup maxrider pour tes liens.
    Ca servira sûrement

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par rouliane Voir le message
    Enfin, il est bien de faire avant le programme en séquentiel, et quand tu es sur que ça marche, le paralléliser.
    Hmmm, je me méfierais de cette affirmation. L'architecture temporelle (dont le parallélisme fait partie) est plus rebelle aux évolutions de conception que l'architecture de classes ou de données et nécessite souvent une saine dose de réflexion en amont pour éviter les dépendances inutiles entre données, par exemple.

    L'affirmation n'est pas complètement fausse, mais peut-être un peu simpliste.

    Carl

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 110
    Points : 130
    Points
    130
    Par défaut
    Bonjour,

    une partie de mon travail consiste à paralléliser des programmes (en gros, je vois cela tous les jours quoi ). Cela ne veut pas dire que je suis spécialiste mais bon, je peux quand même en discuter. Je donne aussi des cours de MPI de temps à autre

    En lisant ce fil, j'ai vu des choses intéressantes (ca me donne des idées pour mes futurs cours notamment pour voir comment les gens voient MPI).

    Ce que je voudrais préciser, c'est au sujet de MPI. Il ne faut pas tomber dans le piège : "Je connais MPI = je sais programmer en parallèle!". MPI est juste un outil qui permet de faire du parallélisme au sens où même si on connait par coeur MPI, on ne va pas forcément pondre un programme parallèle plus performant que si on l'avait fait en séquentiel.

    Sinon, je suis assez d'accord avec le reste (tu peux faire de la parallélisation sur processeur comme tu dis avec MPI ) et surtout avec le précédent message concernant la parallélisation d'un programme séquentiel.

  16. #16
    Membre à l'essai Avatar de fabzyr
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 55
    Points : 24
    Points
    24
    Par défaut
    Désoler de déterrer le sujet mais aucun de vos tutos existe encore ... , c'est le défaut d'avoir un exam qui porte sur l'utilisation de bibliothèque tels que MPI qui est un vrai fossile

  17. #17
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 658
    Points : 188 669
    Points
    188 669
    Par défaut
    Un fossile ? La norme MPI 3.0 est sortie en 2012, l'implémentation OpenMPI 4.0 est sortie en mars 2019, MPICH 3.3 en janvier, Intel continue le développement de son implémentation. MPI est indispensable dans les supercalculateurs actuels, notamment parce que ces machines sont beaucoup plus fiables (alors que Hadoop part presque de l'hypothèse qu'on ne peut faire confiance à personne — d'où une grosse perte d'efficacité par rapport à MPI). MPI reste d'actualité pour du calcul sur trente-six machines, même si ce n'est pas la bibliothèque la plus agréable à utiliser (très loin de là, d'ailleurs… je ne compte plus les neurones que j'ai perdus avec ce truc ).

  18. #18
    Membre à l'essai Avatar de fabzyr
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 55
    Points : 24
    Points
    24
    Par défaut
    Merci pour votre retour , vous avez des tuto ou documentation pour l'utilisation des fonctions de base tels que Scater , Gather , send , recv etc ?

  19. #19
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 658
    Points : 188 669
    Points
    188 669
    Par défaut
    Sur https://hpc.developpez.com/tutoriels/#parallele-message, tu as un lien vers ftp://ftp-developpez.com/semelin/cours-parallelisme.pdf, regarde dès la page 53. Ce n'est pas du MPI moderne, mais ça devrait te dépatouiller.

Discussions similaires

  1. executer une application a distance : Sockets ? RPC ? CORBA?
    Par a_hic dans le forum Développement
    Réponses: 5
    Dernier message: 30/05/2006, 13h02
  2. Accès à une application ouverte (OLE Automation ?)
    Par PascalB dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/06/2002, 14h39
  3. Réponses: 1
    Dernier message: 13/05/2002, 09h19
  4. [Kylix] Execution d'une application hors de l'edi
    Par Sadam Sivaller dans le forum EDI
    Réponses: 1
    Dernier message: 20/04/2002, 23h22
  5. Réponses: 2
    Dernier message: 15/04/2002, 12h56

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