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 :

[MPI] Gestion dynamique de process


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Par défaut [MPI] Gestion dynamique de process
    Bonjour,
    Mon problème est le suivant: je souhaite savoir s'il est possible de commencer l'exécution d'un programme, contenant des directives MPI, sur un seul processeur, pour ensuite lorsque l'utilisateur le désire (par une interface graphique simple par exemple), lancer d'autre processeur pour éxécuter un bou du programme en parallèle.
    Je souhaite en fait réaliser un programme avec une légère interface graphique pour résoudre des système linéaires. L'utilisateur aurait le choix entre plusieurs solveurs numériques pour résoudre son système, certains séquentiels, d'autres parallèles. En fait ce qui m'embête c'est le mpirun du début. Je souhaite lancer mon programme principale sur un seul processeur, et lorsque l'utilisateur décide d'utiliser un solveur numérique parallèle, je lance plusieurs processeurs qui interpreteront les directives mpi de ce solveur.
    J'espère avoir été assez clair.
    Merci par avance!!!
    PS: Il n'y a pas de rubrique MPI ou calcul parallèle dans le forum donc j'ai posté ici car mon code est en c. Si il y a un meilleur endroit dans ce forum pour ça, ou même si vous connaissez un forum actif sur ces problématique, merci de m'en faire part.

  2. #2
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Par défaut
    Deja concernant la section, je dirai que ca a plus a voir avec la section bibliotheque

    Concernant ton souci de nombres de processeurs je ne pense pas que cela soit possible comme tu le veux.
    Etant donné que l'utilisation de MPI fait intervenir pas mal de fonctions pour le transfert des données/infos entre les CPU, est ce que tu ne pourrais pas voir pour que ton code puisse etre lancé de 2 manieres differentes :
    1-compilation afin d'obtenir un programme qui n'utilise pas la librairie MPI
    2-compilation en utilisant "l'arsenal" MPI

    Dans tous les cas, si tu gardes une seule version de ton code, ou que tu passes par la méthode 2 de compilation, le parametre transmis a mpirun est le nombre maximal de processeurs utilisable par ton appli, mais cela ne veut pas dire que tout tes processeurs seront utilisés à 100% en continu, tout dépendra de tes fonctions et de l'organisation de ton code.

    Je ne vois pas trop ce qui te "gene" avec le parametre a donner a mpirun, rien ne t'empeche de faire ton interface graphique qui lance via la commande system par ex ton code de calcul en indiquant le nombre voulu de proc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    system("mpirun -np nombre_de_proc chemin_vers_executable");
    Bon courage

  3. #3
    Membre habitué
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Par défaut
    Merci GuiYom00 pour ta participation.
    En fait mon code marche déjà pour les solveurs série. Je souhaite rajouter un solveur parallèle. Je ne souhaite pas changer la structure de mon code pour "un" solveur parallèle. Je veux garder la même philosophie car c'est celle utilisé par SUNDIALS, https://computation.llnl.gov/casc/sundials/main.html, qui est un ensemble de solveurs numérique pour les ODE et DAE sur lequel est basé mon code.
    Le solveur est choisi par l'utilisateur disons par l'interface graphique. Le solveur parallèle ne sera juste qu'une option parmi beaucoup d'autres. Et lorsqu'elle est choisi Je souhaiterais à ce moment la lancer MPI avec le nombre de processeur donné par l'utilisateur.
    J'ai trouvé la fonction MPI_Comm_spawn qui permet une gestion dynamique des processus, à savoir qu'un process peut lancer d'autre process gràce à cette fonction. ça me semble intéressant. Connais tu cette fonction??
    Le truc auquel je pense c'est ça: je lance mon programme principal sur un seul proc. Lorsque l'utilisateur choisis un solveur parallèle je lance plusieurs autre proc grace à MPI_Comm_Spawn, je les récupère grace à MPI_comm_merge et je travaille dessus le temps qu'il me faut.
    Je ne sais pas si c'est vraiment faisble.
    Qu'en pensez vous?

  4. #4
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Par défaut
    Je ne connais pas MPI_Comm_Spawn mais apres avoir un peu regardé le man associé, il semblerait que il soit quand meme necessaire que le processeur pere soit lancé via mpirun (en particulier vu les parametres necessaires pour la fonction)

    Mais la aussi, a mon avis le nombre maximal de processeur que tu vas pouvoir lancer dependra du nombre de processeur indiqué au mpirun, sinon ca serait un peu trop facile d'utiliser cette fonctions pour outrepasser les limites autorisées à un utilisateur sur une machine par ex. Donc on en reviendrait à mon post d'avant.

    Sinon, as tu regardé du cote de PETSc? http://www-unix.mcs.anl.gov/petsc/petsc-as/
    Je ne sais pas si ca convient au type d'equations que tu veux résoudre mais en tout cas c'est un solveur gratuit, réputé, et qui est deja parallele

    Une question quand meme, pour quelle architecture développes tu? si c'est pour du dual/quadricore ou tout architecture en memoire partagée, il serait peut etre plus facile pour toi de te tourner du cote de OpenMP
    A l'inverse si ton code est fait pour etre employé sur des "super calculateurs", est tu sur que tu pourras faire la partie graphique comme tu veux deja? et qu'en est il de la gestion des files d'attentes?

    Edit : lien vers la bibliotheque PETSc

  5. #5
    Membre habitué
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Par défaut
    Tu as raison pour MPI_Comm_Spawn, il faut que le processus père soit lancée via un mpirun. Cela ne pose pas de problème je le lancerai sur un seul processeur, ça reviendra au même.

    Il existe une option, je ne sais plus son nom, qui te permet de spécifier le nombre max de proc utilisable par les processus père. Je pourrais lancer mon processus père avec:
    $mpi -np 1 -nomdeloptionquejaioublié 4 prog.exe
    Dans ce cas la je lance bien mon prog sur un seul processeur et je peux définir quand j'ai envie le nombre de processeur sur lequel lancer mes processus ouvriers dans une limite de 4 (ou 3 ).

    Sinon je ne connaissais pas PETSc, je vais regarder de plus prêt, mais mon but est plus de comprendre comment faire ça. Le programme final m'importe peu en fait.

    Concernant l'architecture, je ne suis pas du tout un expert, ce que je sais c'est que le solveur parallèle (que je n'ai pas écrit moi même) est écrit en MPI. De plus comme je te le disais principalement mon code est basé sur Sundials, qui lui aussi possèdent certaines fonctionnalité de calcul parallèle écrite en MPI.
    Donc c'est ça qui a dicté mon choix.

  6. #6
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Par défaut
    Pour l'architecture je voulais dire sur quel type de machine veux tu faire tourner ton code? ton PC, un cluster? une machine d'un centre de calcul?

    Je viens un peu de regarder plus en detail les specifications de MPI_Comm_Spawn, et je pense que j'ai mal compris une chose dans ce que tu veux faire, ton interface graphique et tes fonctions de resolutions sont un seul et meme programme ou alors l'interface graphique te permet de choisir quel programme lancer?

    Fais attention à une chose, c'est que la machine sur laquelle tu compiles supporte la version 2 de MPI, sinon pas de MPI_Comm_Spawn...

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/07/2006, 16h44
  2. Gestion dynamique de composant
    Par bob1980 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 22/05/2006, 10h53
  3. Réponses: 3
    Dernier message: 24/02/2006, 13h27
  4. Réponses: 24
    Dernier message: 30/10/2005, 09h27
  5. [FLASH MX] Gestion dynamique de liens
    Par guy2004 dans le forum Flash
    Réponses: 18
    Dernier message: 20/01/2005, 08h21

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