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

SL & STL C++ Discussion :

Envoit vector<int> MPI


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 107
    Par défaut Envoit vector<int> MPI
    Bonjour,

    Pour envoyer un vecteur<int> avec mpi dois-je construire un type derive MPI ou existe-t-il d'autre moyen?

    Merci

  2. #2
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 526
    Par défaut
    Citation Envoyé par Jeane
    Bonjour,
    Pour envoyer un vecteur<int> avec mpi dois-je construire un type derive MPI ou existe-t-il d'autre moyen?
    Merci
    c'est quoi MPI ? Mutuelle des Programmeurs Informaticiens ?
    quelle fonction , quelle prototype ?

  3. #3
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    http://people.scs.fsu.edu/~burkardt/...c/mpi/mpi.html

    Trouvé en deux minutes sur Google .











    Ok, je devrais pas faire ça avec un membre comme toi, je m'excuse

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Ça s'envoit de la même manière que tu envoies un tableau...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 107
    Par défaut
    http://people.scs.fsu.edu/~burkardt/...c/mpi/mpi.html

    Trouvé en deux minutes sur Google .
    Je ne trouve pas la reponse a ma question sur cette page

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 107
    Par défaut
    Ça s'envoit de la même manière que tu envoies un tableau...
    Le probleme est que si j ecris un code du style:
    MPI::Init(argc,argv);
    int rank,nprocs,n;
    nprocs=MPI::COMM_WORLD.Get_size();
    rank=MPI::COMM_WORLD.Get_rank();
    std::vector<int> v;

    if(rank==0) {
    v.push_back(0);
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);

    MPI::COMM_WORLD.Send(&v,4,MPI::INT,1,50);

    }
    else {
    MPI::COMM_WORLD.Recv(&v,4,MPI::INT,0,50);
    }
    std::cout<<"Hello Hi, world. I am "<<rank << " of "<<nprocs<<std::endl;
    for(int i=0;i<v.size();i++) std::cout<<v[i]<<" ";
    std::cout<<std::endl;

    MPI::Finalize();


    le resultat est:
    Hello Hi, world. I am 0 of 2
    0 1 2 3
    Hello Hi, world. I am 1 of 2
    1229872 0 1230400 0

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Le probleme est que si j ecris un code du style:
    Le problème plutôt je dirais c'est que tu ne connais pas C++ et que tu fais n'importe quoi.

    Pour envoyer un tableau d'entiers avec MPI, tu fournis deux informations : un pointeur vers le premier élément, et la taille du tableau (et non pas la constante magique 4).
    Il suffit de faire pareil avec std::vector<int>.
    Un pointeur vers le premier élément s'obtient avec &v[0], et la taille s'obtient avec v.size().

    Pour pouvoir lire par contre, il te faudra connaître la taille à l'avance.
    Une alternative étant de d'abord écrire la taille puis les données.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 107
    Par défaut
    Un pointeur vers le premier élément s'obtient avec &v[0]
    Merci c'etait ce que je voulais savoir

  9. #9
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    ça marche pas non!!!!

    par contre ce que j'ai pas compris pourquoi ce code ci dessous fonctionne!!!

    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
     
     
    #include <stdio.h>
    #include <mpi.h>
    #include <iostream>
    #include<vector>
    using namespace::std;
    int main( int argc, char* argv[])
    {
    vector<int> v;
    	int rang,p;
    MPI_Status status;
    /* Initialisation */
    MPI_Init(&argc,&argv);
    MPI_Comm_size(MPI_COMM_WORLD, &p);
    MPI_Comm_rank(MPI_COMM_WORLD,&rang);
    if ( rang == 0) {
     
     
    v.push_back(55);
    v.push_back(56);
    v.push_back(57);
    v.push_back(58);
    MPI_Send(&v[0],v.size(),MPI_INT,0,50,MPI_COMM_WORLD);
     
     
    MPI_Recv(&v[0],v.size(),MPI_INT,0,50,MPI_COMM_WORLD,&status);
    cout<<"v1= "<<v[1];
     
    }
     
    MPI_Finalize();
    return 0;
    }
    mais si je met la Recv dans un autre process ça marche pas
    svp aidez moi

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Citation Envoyé par fatjoe Voir le message
    mais si je met la Recv dans un autre process ça marche pas
    svp aidez moi
    Citation Envoyé par loufoque Voir le message
    Le problème plutôt je dirais c'est que tu ne connais pas C++ et que tu fais n'importe quoi.

    Pour envoyer un tableau d'entiers avec MPI, tu fournis deux informations : un pointeur vers le premier élément, et la taille du tableau (et non pas la constante magique 4).
    Il suffit de faire pareil avec std::vector<int>.
    Un pointeur vers le premier élément s'obtient avec &v[0], et la taille s'obtient avec v.size().

    Pour pouvoir lire par contre, il te faudra connaître la taille à l'avance.
    Une alternative étant de d'abord écrire la taille puis les données.
    Qu'es ce que tu ne comprend pas????

  11. #11
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    j'ai fait ça (la taille du vecteur est fixe, mais ça marche pas)

    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
     
    #include <stdio.h>
    #include <mpi.h>
    #include <iostream>
    #include<vector>
    using namespace::std;
    int main( int argc, char* argv[])
    {
    vector<int> v;
    	int rang,p;
    MPI_Status status;
    /* Initialisation */
    MPI_Init(&argc,&argv);
    MPI_Comm_size(MPI_COMM_WORLD, &p);
    MPI_Comm_rank(MPI_COMM_WORLD,&rang);
    if ( rang == 0) {
     
     
    v.push_back(55);
    v.push_back(56);
    v.push_back(57);
    v.push_back(58);
    MPI_Send(&v[0],v.size(),MPI_INT,1,50,MPI_COMM_WORLD);
     
     
     
    }else if(rang==1)
    {MPI_Recv(&v[0],4,MPI_INT,0,50,MPI_COMM_WORLD,&status);
    cout<<"v1= "<<v[1];
    }
     
    MPI_Finalize();
    return 0;
    }

  12. #12
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Citation Envoyé par fatjoe Voir le message
    j'ai fait ça (la taille du vecteur est fixe, mais ça marche pas)
    Ben non. Tu n'initialise pas la taille de ton vecteur...
    essaie ce code, ca devrait marcher.
    Comprend tu la difference?
    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
     
    #include <stdio.h>
    #include <mpi.h>
    #include <iostream>
    #include<vector>
    using namespace::std;
    int main( int argc, char* argv[])
    {
    vector<int> v(4);
    	int rang,p;
    MPI_Status status;
    /* Initialisation */
    MPI_Init(&argc,&argv);
    MPI_Comm_size(MPI_COMM_WORLD, &p);
    MPI_Comm_rank(MPI_COMM_WORLD,&rang);
    if ( rang == 0) {
     
     
    v[0]=55;
    v[1]=56;
    v[2]=57;
    v[3]=58;
    MPI_Send(&v[0],v.size(),MPI_INT,1,50,MPI_COMM_WORLD);
     
     
     
    }else if(rang==1)
    {MPI_Recv(&v[0],v.size(),MPI_INT,0,50,MPI_COMM_WORLD,&status);
    cout<<"v1= "<<v[1];
    }
     
    MPI_Finalize();
    return 0;
    }

  13. #13
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035

  14. #14
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    je viens d'essayer avec MPICH2 et mon code compile (faut ajouter #define MPICH_SKIP_MPICXX au tout début du fichier) et fonctionne.

  15. #15
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    vous avez essayé mon exemple? car j'ai ajouté le #define...
    mais rien de nouveaux encore les memes erreurs.
    ahhhhhhhhhhhhhhhhhhhhh mon dieu

  16. #16
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Citation Envoyé par fatjoe Voir le message
    vous avez essayé mon exemple? car j'ai ajouté le #define...
    mais rien de nouveaux encore les memes erreurs.
    ahhhhhhhhhhhhhhhhhhhhh mon dieu
    non celui que j'ai corrigé. Ton exemple ne peut pas marcher. Tu n'as pas initialisé la taille du vector.
    Comprend tu le principe de fonctionnement???

    Si tu ne répond pas a mes questions ( ca commence à s'accumuler) on ne pourra pas t'aider.
    De plus, arrête les multi poste, stp...

  17. #17
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    non celui que j'ai corrigé. Ton exemple ne peut pas marcher. Tu n'as pas initialisé la taille du vector.
    Comprend tu le principe de fonctionnement???



    Si tu ne répond pas a mes questions ( ca commence à s'accumuler) on ne pourra pas t'aider.
    De plus, arrête les multi poste, stp...
    oui je comprends le principe .
    pour l'exemple je parle de celui corrigé avec l'initialisation, pour moi ça marche pas .le re voila
    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
     
    #include <stdio.h>
    #include <mpi.h>
    #include <iostream>
    #include<vector>
     
    using namespace::std;
    #define MPICH_SKIP_MPICXX 
    int main( int argc, char* argv[])
    {
    vector<int> v(4);
    	int rang, p, valeur, tag = 10;
    MPI_Status status;
    /* Initialisation */
    MPI_Init(&argc,&argv);
    MPI_Comm_size(MPI_COMM_WORLD, &p);
    MPI_Comm_rank(MPI_COMM_WORLD,&rang);
    if ( rang == 0) {
    v.push_back(55);
    v.push_back(56);
    v.push_back(57);
    v.push_back(58);
     
    MPI_Send(&v[0],v.size(),MPI_INT,1,50,MPI_COMM_WORLD);
    }
    else if ( rang ==1)
    {
    MPI_Recv(&v[0],v.size(),MPI_INT,0,50,MPI_COMM_WORLD,&status);	
    cout<<"v1= "<<v[1];
    }
     
    MPI_Finalize();
    return 0;
    }

Discussions similaires

  1. [MPI] taille du message d'envoit
    Par Jeane dans le forum C++
    Réponses: 2
    Dernier message: 22/08/2007, 20h35
  2. Caster en int le contenu d'un vector
    Par MinsK dans le forum Langage
    Réponses: 6
    Dernier message: 31/05/2007, 16h59
  3. MPI: envoit d'un string
    Par Jeane dans le forum C++
    Réponses: 7
    Dernier message: 15/05/2007, 17h47
  4. tri sur std::vector<std::pair<int, float> >
    Par b4u dans le forum SL & STL
    Réponses: 15
    Dernier message: 01/10/2006, 09h19
  5. Transformation d'un vector en int !
    Par casafa dans le forum SL & STL
    Réponses: 12
    Dernier message: 08/04/2005, 22h25

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