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

Boost C++ Discussion :

Comment utiliser un vecteur Ublas avec open MPI


Sujet :

Boost C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1
    Par défaut Comment utiliser un vecteur Ublas avec open MPI
    Bonjour,

    Je code un programme de calcul de propagation d'onde en parallele.
    Je précise que je débute en programmation C++ et MPI.
    Je suis sous linux.

    J'utilise les vecteur de boost Ublas et j'aimerai utiliser deux fonctions de MPI : scatter et sendrecv.
    Pour ces deux fonctions, il me faut l'addresse du vecteur, si je rentre nom_vecteur le compilateur me dit que ce n'est pas un void *; et si je rentre &nom_vecteur le compilateur n'accepte pas non plus.

    Est-il possible d'obtenir l'index en quelque sorte d'un vecteur Ublas? De cette maniere, je pouraai directement envoyer nom_vecteur.index() avec la methode index que j'aurai crée dans ma classe vecteur.

    Si quelqu'un a une piste ou la solution, merci d'avance.

    Alors voila mon code. il s'agit juste d'un petit test avec scatter et un vecteur(VecteurSP, hérité directement des vecteurs de ublas ,l'avant derniere version,1.36 :

    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
    43
    44
    45
    46
    47
    48
    49
     
    #include <iostream>
    #include <stdio.h>
    #include <fstream>
    #include "MatriceBoost.h"
    #include <mpi.h>
     
     
    using namespace std;
     
     
    int
    main(int argc, char *argv[])
    {
     
     
    int rank, size;
    int i;
     
    int Nx = 20;
    VecteurSP X(Nx);
           for (i=0;i<Nx;i++)
              {
                 X(i) = i;
              }
     
              cout<< "le vecteur X est : "<<X<<endl;
     
    //////////////////////////////debut parallel////////////////////////////////////////////////////////
     
      MPI::Init(argc, argv);
     
            rank = MPI::COMM_WORLD.Get_rank();
            size = MPI::COMM_WORLD.Get_size();
     
            int Nx_proc = Nx/size;
            VecteurSP X_proc(Nx_proc);
     
     
     
           MPI_Scatter( &X(0)), Nx_proc, MPI_REAL, &X_proc(0), Nx_proc, MPI_REAL, 0,    MPI_COMM_WORLD);
     
     
          cout << "Hello world! I am " << rank +1 << " of " << size << " et mon vecteur X_proc est : "<<X_proc<<endl;
     
      MPI::Finalize();
     
      return 0;
    }
    Quand je compile, j'obtient ceci :

    [jerem@localhost MPI_scatter]$ mpic++ -Wall -o main_scatter main_scatter.cpp
    main_scatter.cpp: In function 'int main(int, char**)':
    main_scatter.cpp:40: erreur: cannot convert 'VecteurSP' to 'void*' for argument '1' to 'int MPI_Scatter(void*, int, ompi_datatype_t*, void*, int, ompi_datatype_t*, int, ompi_communicator_t*)'
    main_scatter.cpp:40: erreur: expected `;' before ')' token


    J'ai également essayer de mettre &X(0) à la place de X mais sans succes, dans ce cas il me retourne :
    [jerem@localhost MPI_scatter]$ mpic++ -Wall -o main_scatter main_scatter.cpp
    /tmp/ccDZe6EC.o: In function `main':
    main_scatter.cpp.text+0x87): undefined reference to `VecteurSP::VecteurSP(int)'
    main_scatter.cpp.text+0x145): undefined reference to `VecteurSP::VecteurSP(int)'
    collect2: ld a retourné 1 code d'état d'exécution


    Je précise également que j'ai utilisé le meme programme avec un tableau tout simple et la pas de probleme en mettant juste le nom du tableau comme argument.

    Voila, si il faut des précision aucun souci,

    Merci d'avance!

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par bp4012 Voir le message
    [jerem@localhost MPI_scatter]$ mpic++ -Wall -o main_scatter main_scatter.cpp
    /tmp/ccDZe6EC.o: In function `main':
    main_scatter.cpp.text+0x87): undefined reference to `VecteurSP::VecteurSP(int)'
    main_scatter.cpp.text+0x145): undefined reference to `VecteurSP::VecteurSP(int)'
    collect2: ld a retourné 1 code d'état d'exécution
    Normalement, ça devrait fonctionner, sauf que tu as dû surcharger l'opérateur () sans donner l'implémentation, d'où l'erreur

  3. #3
    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
    Sinon tu sais que y'a un enrobage de MPI dans Boost ?

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par loufoque Voir le message
    Sinon tu sais que y'a un enrobage de MPI dans Boost ?
    Vivement qu'il soit amélioré, d'ailleurs, dans l'état actuel, à part la base de la base, on ne peut rien faire (ouverture de fichier par exemple).

  5. #5
    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
    Ben l'intérêt du truc c'est surtout la sérialisation pour MPI, ce qui est ce qui nous intéresse ici.

Discussions similaires

  1. Réponses: 13
    Dernier message: 25/04/2006, 09h43
  2. Comment utiliser les fichiers *.PNG avec Delphi ?
    Par HopeLeaves dans le forum Composants VCL
    Réponses: 2
    Dernier message: 17/09/2005, 20h59
  3. comment utiliser le message WM_QUERYENDSESSION avec delphi6
    Par evarisnea dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 31/08/2005, 14h57
  4. comment utiliser de l'OpenGL avec du Java ?
    Par DjiZ dans le forum OpenGL
    Réponses: 3
    Dernier message: 14/01/2004, 15h21
  5. Comment utiliser les styles XP avec Dev-C++?
    Par abraxas dans le forum Dev-C++
    Réponses: 3
    Dernier message: 05/10/2003, 19h47

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