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!