Exemple : test.c

text/plain mpi-test.c — 1.6 KB

Contenu du fichier

/*********************************************************************
 * Pour compiler et exécuter
 *   - mpicc -o test mpi-test.c 
 *   - mpirun --hostfile hostfile -np 10 ./test
 *                |                    |
 *                |                    -> nombre de processus
 *                -> un fichier contenant «localhost slots=25»
 **********************************************************************/
#include <stdio.h>
#include <string.h>
#include "mpi.h"
/* Répartiteur */
int master_io(MPI_Comm master_comm, MPI_Comm comm)
{
    int        i,j, size;
    char       buf[256];
    MPI_Status status;
   
    MPI_Comm_size(master_comm, &size);
    for (j=1; j<=2; j++) {
        for (i=1; i<size; i++) {
            MPI_Recv(buf, 256, MPI_CHAR, i, 0, master_comm, &status);
            fputs(buf, stdout);
        }
    }
}
/* Travailleur*/
int slave_io( MPI_Comm master_comm, MPI_Comm comm )
{
    char buf[256];
    int  rank;
    
    MPI_Comm_rank( comm, &rank );

    sprintf( buf, "Bonjour du travailleur #%d\n", rank );
    MPI_Send(buf, strlen(buf) + 1, MPI_CHAR, 0, 0, master_comm);
    
    sprintf( buf, "Au revoir du travailleur #%d\n", rank );
    MPI_Send(buf, strlen(buf) + 1, MPI_CHAR, 0, 0, master_comm);

    return 0;
}
/* Programme principal */
int main(int  argc, char **argv )
{
    int rank, size;
    MPI_Comm new_comm;
   
    MPI_Init( NULL, NULL );
    MPI_Comm_rank(MPI_COMM_WORLD, &rank );
    MPI_Comm_split(MPI_COMM_WORLD, rank == 0, 0, &new_comm);
    if (rank == 0) 
        master_io(MPI_COMM_WORLD, new_comm );
    else
        slave_io( MPI_COMM_WORLD, new_comm );
    MPI_Finalize( );
    return 0;
}