chaponinho Posté(e) le 14 février 2008 Partager Posté(e) le 14 février 2008 Bonjour à tous et merci à Fafaro pour ce topic sur MPI. Sinon mon problème est le suivant: pour résumer je souhaite savoir s'il est possible de commencer l'exécution d'un programme, contenant des directives MPI, sur un seul processeur, pour ensuite lorsque l'utilisateur le désire (par une interface graphique simple par exemple), lancer d'autre processeur pour éxécuter un bou du programme en parallèle. Je souhaite en fait réaliser un programme avec une légère interface graphique pour résoudre des système linéaires. L'utilisateur aurait le choix entre plusieurs solveurs numériques pour résoudre son système, certains séquentiels, d'autres parallèles. En fait ce qui m'embête c'est le mpirun du début. Je souhaite lancer mon programme principale sur un seul processeur, et lorsque l'utilisateur décide d'utiliser un solveur numérique parallèle, je lance plusieurs processeurs qui interpreteront les directives mpi de ce solveur. J'espère avoir été assez clair. Il semble que ce topic soit délaissé depuis quelques temps. Si vous tombez sur mon message, peut être aurait vous l'amabilité de me rediriger vers un forum MPI plus actif. Merci par avance!!! Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 18 février 2008 Partager Posté(e) le 18 février 2008 Ne peux-tu pas te débrouiller pour mettre le solveur dans un process à par et forker dès que l'utilisateur décide de lancer en parallèle ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
chaponinho Posté(e) le 19 février 2008 Partager Posté(e) le 19 février 2008 Ne peux-tu pas te débrouiller pour mettre le solveur dans un process à par et forker dès que l'utilisateur décide de lancer en parallèle ? Que veux tu dire par "forker"? Désolé pour mon manque de vocabulaire. Si tu veux dire lancer le solveur parallèle sur d'autres process à partir du programme principale je suis en train d'envisager cette solution. Je ne connaissais pas la fonction MPI_Comme Spawn et fafaro m'en a parlé. Le truc que je me demande c'est si je fais un MPI_Comm_spawn et que je lance 4 processus ouvriers par exemple, n'est il pas possible grâce à un MPI_Comme_merge de récupérer dans le programme principal le communicateur associé aux processus ouvriers et de travailler dans le programme principal avec ce nouveau communicateur? Ainsi je pourrais lancer mon programme prinipal sur un seul proc. Lorsque l'utilisateur choisis un solveur parallèle je lance plusieurs autre proc grace à MPI_Comm_Spawn, je les récupère grace à MPI_comm_merge et je travaille dessus le temps qu'il me faut. C'est une idée. Peut être idiote. Qu'en penses tu? Merci de ton aide. Damien Lien vers le commentaire Partager sur d’autres sites More sharing options...
rainette Posté(e) le 8 avril 2008 Partager Posté(e) le 8 avril 2008 Bonjour, je teste le mpi sur mon PC (processeur double coeur) petite erreur, je recherche sur notre ami google et j'atteris ici!! très intéressant jepense pour qui veut découvrir le calcul parallèl sans se sentir seul... compilation:> mpif90 -o mp mpi.f90 execution:> mpirun -np 2 mp il est censé affiché: je suis 0 parmi 2 je suis 1 parmi 2 mais j'ai seulement: je suis 0 parmi 1 précédé du message d'erreur: libibverbs: Fatal: couldn't read uverbs ABI version.-------------------------------------------------------------------------- [0,0,0]: OpenIB on host login-laptop was unable to find any HCAs. Another transport will be used instead, although this may result in lower performance. -------------------------------------------------------------------------- help please!! Lien vers le commentaire Partager sur d’autres sites More sharing options...
chaponinho Posté(e) le 8 avril 2008 Partager Posté(e) le 8 avril 2008 compilation:> mpif90 -o mp mpi.f90execution:> mpirun -np 2 mp Salut, Comme tu peux le voir ce post est un peu laisser à l'abandon. Ta manip sembe etre correct. Fais nous voir ton code. Lien vers le commentaire Partager sur d’autres sites More sharing options...
rainette Posté(e) le 8 avril 2008 Partager Posté(e) le 8 avril 2008 rien de bien méchant, tout ce qu'il y a de standard, mais le soucis ne vient pas du code: il marche nickel sur une machine parallèle (une vraie cette fois) que j'utilise au boulot le problème, c'est comment faire sur ubuntu pour parallélisé sans triché, j'ai dans l'après midi réussi à faire tourner le prog, mais pas sur les deux c½urs de mon PC, je pouvais même mettre autant de processeurs que je le décidais, mais il ne me semble pas que quand j'ai mis -np 15, j'ai 15 c½urs dans mon PC merci de ta réponse malgré la pause du topic! Lien vers le commentaire Partager sur d’autres sites More sharing options...
chaponinho Posté(e) le 9 avril 2008 Partager Posté(e) le 9 avril 2008 rien de bien méchant,tout ce qu'il y a de standard, mais le soucis ne vient pas du code: il marche nickel sur une machine parallèle (une vraie cette fois) que j'utilise au boulot le problème, c'est comment faire sur ubuntu pour parallélisé sans triché, j'ai dans l'après midi réussi à faire tourner le prog, mais pas sur les deux c½urs de mon PC, je pouvais même mettre autant de processeurs que je le décidais, mais il ne me semble pas que quand j'ai mis -np 15, j'ai 15 c½urs dans mon PC merci de ta réponse malgré la pause du topic! Je suis pas un expert mais d'après ce que j'ai pu lire mpi s'adapte à l'environnement dans lequel tu le lances. Logiquement si tu as un dual core et que tu lances un prog sur deux proc il devrait répartir les taches entre les deux. Si tu lances sur 15, il va d'une certaine manière émuler les 13 manquants. C'est certainement mieux expliquer ailleurs...peut être même plus haut dans le topic...je sais pas. Bref si t'as pas une vrai architecture pour faire du parallèle, mpi triche... Lien vers le commentaire Partager sur d’autres sites More sharing options...
fafaro Posté(e) le 13 avril 2008 Auteur Partager Posté(e) le 13 avril 2008 Je suis pas un expert mais d'après ce que j'ai pu lire mpi s'adapte à l'environnement dans lequel tu le lances.Logiquement si tu as un dual core et que tu lances un prog sur deux proc il devrait répartir les taches entre les deux. Si tu lances sur 15, il va d'une certaine manière émuler les 13 manquants. C'est certainement mieux expliquer ailleurs...peut être même plus haut dans le topic...je sais pas. Bref si t'as pas une vrai architecture pour faire du parallèle, mpi triche... Oui c'est ça, MPI envoie le nombre de processus que tu lui demandes d'envoyer sur les machines que tu lui demandes d'utiliser. Après c'est ton OS qui répartit les processus sur les processeurs qu'il voit. Je ne passe plus très souvent sur le forum, désolé pour les questions qui restent sans réponse. Lien vers le commentaire Partager sur d’autres sites More sharing options...
rainette Posté(e) le 15 avril 2008 Partager Posté(e) le 15 avril 2008 Nouvelle question, plus technique: je veux envoyer une matrice dans les processeurs pour répartir le boulot: nbligne=n+1 lignes pour les premiers processeurs nbligne=n lignes pour les suivants j'utilise un mpi_type_vector pour créé ces blocs: mpi_type_vector(nbcolonne,nbligne,sum(nbligne),mpi_real, blocs,mpi_comm_world, erreur) (si je me suis trompé dans la syntaxe on s'en fout c'est pas le soucis) puis une structure de type (blocs, mpi_ub) avec des décalages (0,nbligne * size_of_real) et enfin j'envoie le tout avec un bon scatterv le tout marche bien si nbligne est le même pour tous les processeurs, sinon pour tous ceux qui en ont un différent du processeur 0 (qui envoie), alors là ils recoivent décaler, c'est à dire que le scatterv considère que le type blocs est le même pour tous les processeurs... voili le problème évidemment, si je ne trouve pas de solution je peux envoyer colonne par colonne, ça c'est sur ça marche, mais je veux éviter de faire exploser le nombre de scatterv, ou autre, ça n'aurai plus d'intérêt merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
rainette Posté(e) le 22 avril 2008 Partager Posté(e) le 22 avril 2008 évidemment, si je ne trouve pas de solution je peux envoyer colonne par colonne, ça c'est sur ça marche, mais je veux éviter de faire exploser le nombre de scatterv, ou autre, ça n'aurai plus d'intérêt solution que j'ai trouvée (crée) je crée 2 communicateurs j'envoie la 2eme partie qui m'embete avec un send/recv puis scatter sur ces 2communicateurs (qui ont le même nom puisqu'aucun élément commun) il y a peut être plus simple mais ça marche bien et je ne perd pas trop de temps en test... Lien vers le commentaire Partager sur d’autres sites More sharing options...
fafaro Posté(e) le 26 avril 2008 Auteur Partager Posté(e) le 26 avril 2008 Je ne comprends pas exactement ce que tu veux faire. Tu programmes en quel langage ? Si c'est en Fortran, tu es obligé de jongler pour partager une matrice selon ses lignes, mais en C c'est immédiat. Lien vers le commentaire Partager sur d’autres sites More sharing options...
rainette Posté(e) le 7 mai 2008 Partager Posté(e) le 7 mai 2008 Nouvelle question: j'ai un programme principal qui fait appel à une fonction f comment va se comporter le code MPI: -si il est initialiser avant l'appel -si il est initialiser dans f -les deux (une erreur sans doute) Lien vers le commentaire Partager sur d’autres sites More sharing options...
fafaro Posté(e) le 7 mai 2008 Auteur Partager Posté(e) le 7 mai 2008 Nouvelle question:j'ai un programme principal qui fait appel à une fonction f comment va se comporter le code MPI: -si il est initialiser avant l'appel -si il est initialiser dans f -les deux (une erreur sans doute) Je n'ai jamais tenté d'initialiser dans les 2 mais je suppose effectivement que ça produirait une erreur. Sinon il ne se passe rien de très particulier si tu initialises dans le programme principal ou dans la fonction. 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.