#include <stdio.h>
#include <mpi.h>
void main (int argc, char *argv[])
{
MPI_Status statut;
int etiquette=100;
int A[10],B[10],C[10],Aloc[5],Bloc[5],Cloc[5];
int i;
int nb_procs,rang;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD,&nb_procs);
MPI_Comm_rank(MPI_COMM_WORLD,&rang);
if (rang == 0)
{
for(i=1;i<=10;i++)
{
A[i-1] = i;
B[i-1] = 10 - i;
}
printf ("LES DEUX VECTEURS :\n");
printf ("A = ");
for(i=1;i<=10;i++)
{
printf (" %d ", A[i-1]);
}
printf ("\nB = ");
for(i=1;i<=10;i++)
{
printf (" %d ",B[i-1]);
}
}
MPI_Barrier (MPI_COMM_WORLD);
if (rang == 0)
{
MPI_Send (&A[0],5, MPI_INT ,0,etiquette, MPI_COMM_WORLD);
MPI_Send (&A[5],5, MPI_INT ,1,etiquette, MPI_COMM_WORLD);
MPI_Send (&B[0],5, MPI_INT ,0,etiquette+1, MPI_COMM_WORLD);
MPI_Send (&B[5],5, MPI_INT ,1,etiquette+1, MPI_COMM_WORLD);
}
MPI_Recv (&Aloc[0],5, MPI_INT ,0,etiquette, MPI_COMM_WORLD,&statut);
MPI_Recv (&Bloc[0],5, MPI_INT ,0,etiquette+1, MPI_COMM_WORLD,&statut);
MPI_Barrier ( MPI_COMM_WORLD);
if (rang == 0)
{
printf ("\nLES DEUX VECTEURS LOCAUX :\n");
}
MPI_Barrier ( MPI_COMM_WORLD);
printf ("Je suis le proc %d parmi %d processus", rang,nb_procs);
printf (" \n A local ( proc %d ) = ",rang);
for(i=1;i<=5;i++)
{
printf (" %d ",Aloc[i-1]);
}
MPI_Barrier ( MPI_COMM_WORLD);
printf (" \n B local ( proc %d ) = ",rang);
for(i=1;i<=5;i++)
{
printf (" %d ",Bloc[i-1]);
}
MPI_Barrier ( MPI_COMM_WORLD);
for(i=1;i<=5;i++)
{
Cloc[i-1] = Aloc[i-1] + Bloc[i-1];
}
MPI_Barrier ( MPI_COMM_WORLD);
if (rang == 0)
{
printf (" \n LE VECTEUR SOMME LOCAL : ");
}
MPI_Barrier ( MPI_COMM_WORLD);
printf (" \n C local ( proc %d ) = ",rang);
for(i=1;i<=5;i++)
{
printf (" %d ",Cloc[i-1]);
}
MPI_Barrier ( MPI_COMM_WORLD);
MPI_Send (&Cloc[0],5, MPI_INT, 0, etiquette, MPI_COMM_WORLD);
if (rang == 0)
{
MPI_Recv (&C[0],5, MPI_INT, 0, etiquette, MPI_COMM_WORLD,&statut);
MPI_Recv (&C[5],5, MPI_INT, 1, etiquette, MPI_COMM_WORLD,&statut);
}
if (rang == 0)
{
printf (" \n LE VECTEUR SOMME : ");
for(i=1;i<=10;i++)
{
printf (" %d ",C[i-1]);
}
printf (" \n ");
}
MPI_Finalize();
}