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

Threads & Processus C++ Discussion :

Mix boost thread et boost MPI


Sujet :

Threads & Processus C++

  1. #1
    Membre habitué
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juillet 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 11
    Par défaut Mix boost thread et boost MPI
    Bonjour tout le monde,
    Dans une librairie, j'ai besoin d'avoir plusieurs receveurs qui sont en attente d'un message en même temps. Je me suis dit que la solution était d'inclure l'appel de recv dans des threads. Cependant, j'ai un comportement erratique à l’exécution avec des segmentations faults.
    Voici le code servant de test à cette idée :
    Code : 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    mpi::communicator world;
    int receiveInt()
    {
        while(1==1){
            int i;
            world.recv(0,0,i);
            cout<<"int "<<i<<endl;
        }
    }
    int receiveStr()
    {
        while(1==1){
            string str;
            world.recv(0,1,str);
            cout<<"str "<<str<<endl;
        }
    }
    int main(int argc, char* argv[]) 
    {
        mpi::environment env(argc, argv);
        if (world.rank() == 0) {
            int i=0;
            while(1==1)
            {
                i++;
                sleep(1);
                world.send(1,0,i);
                string str = "Hello world!";
                world.send(1,1,str);
                i++;
            }
        }
        else
        {
     
            boost::thread thrd1(receiveInt);
            boost::thread thrd2 (receiveStr);
            thrd2.join();
            thrd1.join();
        }
    }
    Si quelqu'un pouvait m'aider, cela me rendrait une fière chandelle.
    Merci

  2. #2
    Membre habitué
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juillet 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 11
    Par défaut
    Après des recherches, il faut ajouter [URL="http://omgili.com/mailinglist/boost-users/lists/boost/org/2010120605580817666web003roc2bluetiecom.html"]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE , &provided);
        if (MPI_THREAD_MULTIPLE  > provided) {
            cerr<<"warning: MPI impl does not support the requested threading model"<<endl;
        }
    Le problème est que maintenant j'ai le message d'erreur. Pour information, j'ai une distribution ubuntu.

  3. #3
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    en general on fait des threads dans MPI, pas de MPI dans des threads.
    Si tu veux des i/o asynchrone, regarde du cote de MPI_IRecv ...

Discussions similaires

  1. Arreter l'execution d'un boost::thread
    Par stranger dans le forum Boost
    Réponses: 9
    Dernier message: 22/05/2007, 18h37
  2. [Débutant] boost::thread non-lvalue
    Par Tymk dans le forum Boost
    Réponses: 16
    Dernier message: 18/11/2006, 14h23
  3. Questions de perfomance avec boost::thread
    Par Rafy dans le forum Boost
    Réponses: 36
    Dernier message: 05/10/2006, 15h21
  4. boost::thread et OpenGL
    Par Kurisu dans le forum Boost
    Réponses: 12
    Dernier message: 19/09/2006, 13h23

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