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++

  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
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    c'est fait mais ça marche pas

  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
    Citation Envoyé par fatjoe Voir le message
    c'est fait mais ça marche pas
    Ca te fait quoi???

  15. #15
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    1 - MPI_RECV : Message truncated
    [1] Aborting program !
    [1] Aborting program!
    Error 14, process 1,

  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
    1 - MPI_RECV : Message truncated
    [1] Aborting program !
    [1] Aborting program!
    Error 14, process 1,

    tu as bien copié le code, compilé (il n'y as pas eu d'erreur) et executé??

    es ce que l'exemple qui est ici fonctionne :
    http://en.wikipedia.org/wiki/Message...xample_program

    sinon, tu compile avec quoi et avec quel implementation de MPI

  17. #17
    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

  18. #18
    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.

  19. #19
    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

  20. #20
    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...

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