fatjoe2008 Posté(e) le 11 avril 2008 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
fafaro Posté(e) le 13 avril 2008 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.
fatjoe2008 Posté(e) le 13 avril 2008 Auteur 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
fafaro Posté(e) le 14 avril 2008 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.
fatjoe2008 Posté(e) le 14 avril 2008 Auteur 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
fafaro Posté(e) le 15 avril 2008 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;
fatjoe2008 Posté(e) le 18 avril 2008 Auteur 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 > ?.
fatjoe2008 Posté(e) le 25 avril 2008 Auteur 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
fafaro Posté(e) le 26 avril 2008 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.
Spaz001 Posté(e) le 26 avril 2008 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
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.