Parallèlisation d'un programme avec MPICH

Parallèlisation d'un programme avec MPICH - C++ - Programmation

Marsh Posté le 04-10-2006 à 15:27:50    

Bonjour,
 
Je cherche à réaliser un programme parallèle avec MPICH-1.2.7pl sur un cluster de trois machines.
Pour cela, j'ai déja repris un programme de test classique trouvé dans un tutorial pour vérifier que les machines communiquent entre-elles.
Néanmoins, j'ai déja un souci. En effet, le programme suivant :
 

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "mpi.h"
  4. #include <iostream>
  5. using namespace std;
  6. int main(int argc, char** argv)
  7. {
  8.   int my_rank;       /* Rank of process */
  9.   int p;             /* Number of processses */
  10.   int source;        /* Rank of sender */
  11.   int dest;          /* Rank of receiver */
  12.   int tag = 50;      /* Tag of messages */
  13.   char message[100]; /* Storage of message */
  14.   MPI_Status status; /* Return status for receive */
  15.   MPI_Init(&argc,&argv);
  16.   MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);
  17.   MPI_Comm_size(MPI_COMM_WORLD,&p);
  18.   if (my_rank != 0)
  19.     {
  20.       sprintf(message,"Greetings from process %d",my_rank);
  21.       dest = 0;
  22.       /* Use strlen(message)+1 to include '\0' */
  23.       MPI_Send(message,strlen(message)+1,MPI_CHAR,dest,tag,MPI_COMM_WORLD);
  24.     }
  25.   else
  26.     {
  27.       /* rank = 0 */
  28.       for(source = 1;source < p; source++)
  29. {
  30.   MPI_Recv(message,100,MPI_CHAR,source,tag,MPI_COMM_WORLD,&status);
  31.   cout << "message" << endl;
  32. }
  33.     }
  34.   MPI_Finalize();
  35. }


 
ne me renvoie rien alors qu'il devrait donner le "message" à deux occasions, sur les 2 processeurs sur lesquels il est envoyé.
Ce qui m'inquiète en fait c'est que la variable " p " reste fixée à 1 dès le début du calcul, quand j'en demande la valeur, alors qu'elle devrait être égale à 3, le nombre de processeurs reliés entre eux.
 
Pourtant le fichier /usr/local/mpich-1.2.7pl/util/machines/machines.LINUX contient bien le nom des 3 machines visibles !
 
Sauriez-vous d'ou vient le problème ?
 
Merci d'avance de votre aide,
 
Nathan

Reply

Marsh Posté le 04-10-2006 à 15:27:50   

Reply

Marsh Posté le 04-10-2006 à 16:25:53    

tu peux poster la ligne de commande que tu utilises pour lancer le programme ?


---------------
TriScale innov
Reply

Marsh Posté le 06-10-2006 à 20:00:39    

Je compile le programme par les commandes :
 
g++ -c main.C -I/usr/local/mpich-1.2.7pl/include
g++ -o main main.o -lmpich -L/usr/local/mpich-1.2.7pl/lib
 
et je lance simplement par :
 
main
 
Est-ce que c'est cela qui me pose problème ?

Reply

Marsh Posté le 07-10-2006 à 00:13:36    

oui, c'est sans doute là qu'est ton problème.
 
* Il vaut mieux que tu compiles avec mpiCC (qui est juste un alias pour g++ avec les bonnes options ; tu sembles l'avoir bien fait à la main, mais c'est plus simple d'utiliser les outils fournis ;))
* Il faut que tu exécutes ton binaire avec mpirun (dont les options en ligne de commande te permettent de déterminer le nombre de processeurs à utiliser, etc.)
 


---------------
TriScale innov
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed