April 11, 200817 yr 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
April 13, 200817 yr 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.
April 13, 200817 yr Author 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
April 14, 200817 yr 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.
April 14, 200817 yr Author 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
April 15, 200817 yr 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;
April 18, 200817 yr Author 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 > ?.
April 25, 200817 yr Author 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
April 26, 200817 yr 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.
April 26, 200817 yr 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
Archived
This topic is now archived and is closed to further replies.