IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

faire un programme


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 2
    Par défaut faire un programme
    bonjour à tous.

    Je cherche une personne capable d'écrire un programme en C en utilisant MPI.
    Le but est d'écrire un programme en MPI avec un noeud maître (0) et un noeud esclave (1).

    Le noeud maître effectue les tâches 1,2 et 4; Il envoie le tableau à l'esclave qui effectue la tâche 3:

    Ecrire un programme en C qui

    1° Demande un paramètre N <= 100
    2° Génère un tableau de N valeurs aléatoires
    3° Calcule la somme des valeurs
    4° Affiche la somme à l'écran

    si quelqu'un veut bien me poster l'algorithme. merci à vous

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Lio,

    L'algorithme est quasiment inclu dans l'énoncé.

    Et à part ça, un mars, ça te dirait ?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Salut, mon prgm en C avec MPI commence ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
     
    #include "mpi.h" + tous les autres #include
     
    #define ROOT 0 /* le noeud maitre est le 0 */
    /**********************************************
    *                                             *
    *               MPI environment               *
    *                                             *
    ***********************************************/
     
      int rank;             /* rank of process */
      int nbprocs;          /* number of process */
      int sender;           /* rank of sender */
      int dest;             /* rank of receiver */
      int namelen;          /* variable for the processor name */
      char processor_name[MPI_MAX_PROCESSOR_NAME]; /* processor name */
      MPI_Status status;    /* return status for receive */
      int tag;              /* tag for message */
     
     
      /* initialize the MPI execution environment */
      int mpiinit=MPI_Init(&argc,&argv);
      if(mpiinit!=MPI_SUCCESS) ERROR("Initialisation of MPI");
     
      /* determine the rank of the calling process in the communicator */
      MPI_Comm_rank(MPI_COMM_WORLD,&rank);
     
      /* determine the size of the group associated with a communicator */
      MPI_Comm_size(MPI_COMM_WORLD,&nbprocs);
     
      if(nbprocs<1) ERROR("number of processors must be greather or equal to 1");
     
      /* determine the processor name */
      MPI_Get_processor_name(processor_name,&namelen);
    les envois se font ansi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(rank!=ROOT)
    {
    tag=rank;
    MPI_Send(Particles[rank],sizeParticles[rank],MPI_DOUBLE,ROOT,tag,MPI_COMM_WORLD);
    }
    et + généralement

    1e argument : adresse de ta variable
    2e argument : taille de ta variables
    3e arg : le type de ton argument (qui peut être un type dérivé, je peux te montrer un exemple si tu veux)
    4e arg : le tag pour différencier les envois
    5e arg : tu laisses comme il est

    les réceptions se font ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for(sender=1;sender<nbprocs;++sender)
          {
            tag=sender;
    	MPI_Recv(Particles[sender],sizeParticles[sender],MPI_DOUBLE,sender,tag,MPI_COMM_WORLD,&status);
     
          } /* end for(sender=1;sender<nbprocs;++sender) */
    A la fin de ton prgm tu fais TOUJOURS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    /* waits until everybody gets here */
      MPI_Barrier(MPI_COMM_WORLD);
     
      /* terminate MPI execution environment */
      MPI_Finalize();
     
    return 0; /* la valeur renvoyée par ton main() */

  4. #4
    Nouveau candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 2
    Par défaut
    merci à toi salseropom, c'est simpa d'aider les gens quand ils trouvent pas. En fait le programme de générer la valeur n et le reste, je viens de le finir.. ce que je n'arrive pas c'est faire le mpi.... Je vais essayé de faire comme tu m'as dit...

    merci

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Dans mon précédent post, avec les fonctions que je viens de te donner, tu peux faire à peu près 98 % de tous tes programmes MPI. Après il y a plus perfectionné avec du MPI_Isend, MPI_Irecv, MPI_Wait, MPI_Pause, MPI_Gather, MPI_Scatter.
    Il faut juste bien faire attention aux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(rank==ROOT) /* noeud maitre */
    {
      faire ceci
    }
    else /* noeud esclave */
    {
     faire cela
    }

Discussions similaires

  1. Faire un programme qui plante et noter le plantage
    Par cedricgirard dans le forum Langage
    Réponses: 9
    Dernier message: 22/03/2006, 16h36
  2. faire migrer programmation INFORMIX > MYSQL??
    Par idevelopper dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 08/02/2006, 17h12
  3. faire un programme sans interface
    Par timsah dans le forum C++Builder
    Réponses: 8
    Dernier message: 01/02/2006, 10h16
  4. Réponses: 7
    Dernier message: 16/04/2005, 08h55
  5. Faire un programme résident
    Par Bubonik software dans le forum C
    Réponses: 21
    Dernier message: 05/09/2004, 10h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo