Bonjour,
Pour envoyer un vecteur<int> avec mpi dois-je construire un type derive MPI ou existe-t-il d'autre moyen?
Merci
 Envoit vector<int> MPI
 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
 
 
				
				
						
						
				c'est quoi MPI ? Mutuelle des Programmeurs Informaticiens ?Envoyé par Jeane

quelle fonction , quelle prototype ?
 
 
				
				
						
						
				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
 
 
				
				
						
						
				Ça s'envoit de la même manière que tu envoies un tableau...
 
 
				
				
						
						
				Je ne trouve pas la reponse a ma question sur cette page
 
 
				
				
						
						
				Le probleme est que si j ecris un code du style:Ça s'envoit de la même manière que tu envoies un tableau...
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
 
 
				
				
						
						
				Le problème plutôt je dirais c'est que tu ne connais pas C++ et que tu fais n'importe quoi.Le probleme est que si j ecris un code du style:
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.
 
 
				
				
						
						
				Merci c'etait ce que je voulais savoirUn pointeur vers le premier élément s'obtient avec &v[0]
 
			
			 
			
			
			
			 
			
				
 
 
				
				
						
						
				ça marche pas non!!!!
par contre ce que j'ai pas compris pourquoi ce code ci dessous fonctionne!!!
mais si je met la Recv dans un autre process ça marche pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
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
svp aidez moi
 
			
			 
			
			
			
			 
			
				
 
 
				
				
						
						
				j'ai fait ça (la taille du vecteur est fixe, mais ça marche pas)
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
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
 
 
				
				
						
						
				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 
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
 
 
				
				
						
						
				je viens d'essayer avec MPICH2 et mon code compile (faut ajouter #define MPICH_SKIP_MPICXX au tout début du fichier) et fonctionne.
 
			
			 
			
			
			
			 
			
				
 
 
				
				
						
						
				vous avez essayé mon exemple? car j'ai ajouté le #define...
mais rien de nouveaux encore les memes erreurs.
ahhhhhhhhhhhhhhhhhhhhh mon dieu
 
			
			 
			
			
			
			 
			
				
 
 
				
				
						
						
				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 
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
Partager