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