fatjoe2008 Posté(e) le 11 avril 2008 Partager Posté(e) le 11 avril 2008 bonjour, j'ai besoin d'envoyé une matrice en MPI, je travaille avec c++ et les vector<vector<int> >Ma_matrice; comment je peux envoyer ça directement au lieu de faire une boucle et envoyé chaque vector tout seul(c'est ce que je fait maintenant). merci d'avance Lien vers le commentaire Partager sur d’autres sites More sharing options...
fafaro Posté(e) le 13 avril 2008 Partager Posté(e) le 13 avril 2008 bonjour,j'ai besoin d'envoyé une matrice en MPI, je travaille avec c++ et les vector<vector<int> >Ma_matrice; comment je peux envoyer ça directement au lieu de faire une boucle et envoyé chaque vector tout seul(c'est ce que je fait maintenant). merci d'avance Salut, Je ne connais pas le C++ mais a priori si tu te débrouilles pour que les éléments de ta matrice se suivent en mémoire et que tu donnes l'adresse du 1er élément et le nombre total d'éléments de la matrice dans la fonction d'envoi de message (MPI_Send par exemple), ça fonctionnera. Lien vers le commentaire Partager sur d’autres sites More sharing options...
fatjoe2008 Posté(e) le 13 avril 2008 Auteur Partager Posté(e) le 13 avril 2008 bonjour,j'ai besoin d'envoyé une matrice en MPI, je travaille avec c++ et les vector<vector<int> >Ma_matrice; comment je peux envoyer ça directement au lieu de faire une boucle et envoyé chaque vector tout seul(c'est ce que je fait maintenant). merci d'avance Salut, Je ne connais pas le C++ mais a priori si tu te débrouilles pour que les éléments de ta matrice se suivent en mémoire et que tu donnes l'adresse du 1er élément et le nombre total d'éléments de la matrice dans la fonction d'envoi de message (MPI_Send par exemple), ça fonctionnera. oui je l'ai fait, j'ai envoyé vecteur par vecteur et ça marche nickel mais , je sais pas si c'est une bonne méthode ou bien y a autre méthodes. merci pour votre réponse Lien vers le commentaire Partager sur d’autres sites More sharing options...
fafaro Posté(e) le 14 avril 2008 Partager Posté(e) le 14 avril 2008 oui je l'ai fait, j'ai envoyé vecteur par vecteur et ça marche nickel mais , je sais pas si c'est une bonne méthode ou bien y a autre méthodes.merci pour votre réponse La bonne méthode c'est de tout envoyer en une fois. Pour cela, il faut que les vecteurs qui composent la matrice occupent des emplacements mémoires consécutifs. Lien vers le commentaire Partager sur d’autres sites More sharing options...
fatjoe2008 Posté(e) le 14 avril 2008 Auteur Partager Posté(e) le 14 avril 2008 oui je l'ai fait, j'ai envoyé vecteur par vecteur et ça marche nickel mais , je sais pas si c'est une bonne méthode ou bien y a autre méthodes.merci pour votre réponse La bonne méthode c'est de tout envoyer en une fois. Pour cela, il faut que les vecteurs qui composent la matrice occupent des emplacements mémoires consécutifs. et comment je peux faire ça? pouvez vous me donnez la démarche? merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
fafaro Posté(e) le 15 avril 2008 Partager Posté(e) le 15 avril 2008 oui je l'ai fait, j'ai envoyé vecteur par vecteur et ça marche nickel mais , je sais pas si c'est une bonne méthode ou bien y a autre méthodes.merci pour votre réponse La bonne méthode c'est de tout envoyer en une fois. Pour cela, il faut que les vecteurs qui composent la matrice occupent des emplacements mémoires consécutifs. et comment je peux faire ça? pouvez vous me donnez la démarche? merci C'est un problème de C++ et pas de parallélisme ça. En C, il faut faire quelque chose comme ça : int **x; int *a; int i; int N; // dimension de la matrice carré a=malloc(N*N*sizeof(int)); // va contenir tous les elements de la matrice x=malloc(N*sizeof(int *)); // matrice : tableau de pointeurs for(i=0; i<N; i++) x[i]=a+i*N; Lien vers le commentaire Partager sur d’autres sites More sharing options...
fatjoe2008 Posté(e) le 18 avril 2008 Auteur Partager Posté(e) le 18 avril 2008 oui je l'ai fait, j'ai envoyé vecteur par vecteur et ça marche nickel mais , je sais pas si c'est une bonne méthode ou bien y a autre méthodes.merci pour votre réponse La bonne méthode c'est de tout envoyer en une fois. Pour cela, il faut que les vecteurs qui composent la matrice occupent des emplacements mémoires consécutifs. et comment je peux faire ça? pouvez vous me donnez la démarche? merci C'est un problème de C++ et pas de parallélisme ça. En C, il faut faire quelque chose comme ça : int **x; int *a; int i; int N; // dimension de la matrice carré a=malloc(N*N*sizeof(int)); // va contenir tous les elements de la matrice x=malloc(N*sizeof(int *)); // matrice : tableau de pointeurs for(i=0; i<N; i++) x[i]=a+i*N; ça peut pas se faire avec vector<int > ?. Lien vers le commentaire Partager sur d’autres sites More sharing options...
fatjoe2008 Posté(e) le 25 avril 2008 Auteur Partager Posté(e) le 25 avril 2008 alors? autre question: j'ai fait du profiling avec mpe, d'un programme simple qui envoi en tableau vers le processus 0 le processus 1 et 2 envoi vers 0; j'ai constaté que le p2 envoi à partir de l'instant 0 mais le p1 envoi aprés quelque millième de seconde et avec d'autre exemples parfois des processus envoi aprés quleques secondes et non pas immédiatement, pourtant il ne dépende de rien. vous avez une idée? merci d'avance Lien vers le commentaire Partager sur d’autres sites More sharing options...
fafaro Posté(e) le 26 avril 2008 Partager Posté(e) le 26 avril 2008 Encore une fois, c'est du C++, pas du MPI, cette histoire de vector. Je ne sais pas comment sont gérés les vector en C++ donc je ne sais pas. Pour le profiling, il n'y a aucune explication particulière je pense. Peut-être que les processus qui démarrent en retard est exécutés sur un processeur déjà chargé. Je n'ai pas de réponse a priori. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Spaz001 Posté(e) le 26 avril 2008 Partager Posté(e) le 26 avril 2008 oui je l'ai fait, j'ai envoyé vecteur par vecteur et ça marche nickel mais , je sais pas si c'est une bonne méthode ou bien y a autre méthodes.merci pour votre réponse La bonne méthode c'est de tout envoyer en une fois. Pour cela, il faut que les vecteurs qui composent la matrice occupent des emplacements mémoires consécutifs. et comment je peux faire ça? pouvez vous me donnez la démarche? merci C'est un problème de C++ et pas de parallélisme ça. En C, il faut faire quelque chose comme ça : int **x; int *a; int i; int N; // dimension de la matrice carré a=malloc(N*N*sizeof(int)); // va contenir tous les elements de la matrice x=malloc(N*sizeof(int *)); // matrice : tableau de pointeurs for(i=0; i<N; i++) x[i]=a+i*N; ça peut pas se faire avec vector<int > ?. std::vector<int> a_envoyer; for( std::vector<std::vector<int>>::iterator it = My_matrice.begin(); it != My_matrice.end(); ++it ) { a_envoyer.insert(a_envoyer.end(), it->begin(), it->end()); } et voilà, tu as ton tableau Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.