Probleme d'execution d'un programme

Fermé
id - 25 mai 2008 à 10:08
 id - 27 mai 2008 à 11:02
Bonjour,
j'ai un probleme d'execution de mon application,est que lors de son execution le proc pere communique seulement avec le dernier proc fils et ça quant j'execute mon application avec plus de deux proc,je vai vous expliquer exactemnt le probleme,mon programme est spicialisé de calculer le vecteur resultant d'une image où chaque processus va executer sa partie dans l'image et apres le proc pere va sommer touts ce qu'il a calculer et tous ce qu les proc fils ont calculé mai mon probleme est que le processus pere calcul seulment ce que le dernier fils a calculé.
svp j'attend la reponse le plus vite possible...........

2 réponses

jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
25 mai 2008 à 12:34
La ponctuation existe. Vite une aspirine...
0
daronmaster Messages postés 326 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 11 mai 2009 44
25 mai 2008 à 13:07
salut,

comment fais-tu pour récupérer ces valeurs ? tu utilises quels mécanismes de communications ? tu as un bout de code ?

merci pour ces réponses, ensuite on regardera comment remédier à ton problème

j'attends

tchû
0
je vai vous donner mon code source et apres vous pouver voire exactement mon probleme,j'utilise le mecanisme de communication one sided avec mpi-2(copie memoire à memoire) svp vous essayer de l'executer et vous pouver voire où est le probleme.voila mon programme:
#include <mpi.h>
#include <math.h>
#include <stdio.h>
#include<sys/timeb.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <iostream.h>
#include <fstream.h>
#define pi 3.14159

int N, M, Q;
void ReadImage(char fname[15],int& , int& , int& );
void imaginfo(void);
void gabor(int Minf, int Msup,int Ninf,int Nsup);

MPI_File ime;

char fname2[15],fname3[15];char *fname;
unsigned char **tab;float **tab2;
double repsi,impsi;
int i,j,t,s,k,l,d,z,m,n,lob,orienta,pro;
float v[7][7],w,a,teta,segmax,segmay,ut=0.05,uh=0.4,x,y,debut_mpi,fin_mpi;

double e[6][4],g[6][4],img[6][4],reg[6][4],segmaloc[6][4],segma[6][4],segma1[6][4],segma2[6][4],segma3[6][4];
double segma4[6][4],segma5[6][4],segma6[6][4],segma7[6][4],segma8[6][4],segma9[6][4],segma10[6][4],segma11[6][4];
double u[6][4],u1[6][4],u2[6][4],u3[6][4],u4[6][4],u5[6][4],u6[6][4],u7[6][4],u8[6][4],u9[6][4],u10[6][4],u11[6][4];
struct timeb debut,fin; //structure pre-definie dans sys/timeb.h
float milisectot=0,milisec1=0,milisec2=0,milisec3=0,temp_id0=0,temp_id1=0,temp_id2=0,temp_id3=0,temp_id=0,temp_id4=0,temp_id5=0,temp_id6=0,temp_id7=0;
int myid,iproc,caro=4,larg,id,p; double moy[6][4];
time_t dateheure;

main(int argc, char **argv)
{
if(argc<6) {printf("\n ## ERREUR !: nombre d'arguments insufisant, préciser respectivement : \n le nom de l'image.pgm;le nbr d'echelle; l'orientation et la fenetre 't*s')\n\v");exit(-1);}

fname=argv[1];
lob=atoi(argv[2]);
orienta=atoi(argv[3]);
t=atoi(argv[4]);
s=atoi(argv[5]);

MPI_File imaE;
MPI_Info info;
MPI_Status status;

char oui,sup[10]="rm ",view[30]="gwenview ";


//system("clear");

MPI_Init(&argc,&argv); /* starts MPI */
MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* get current process id */
MPI_Comm_size(MPI_COMM_WORLD, &p); /* get number of processes */

pro=p;
ReadImage(fname,M,N,Q );

//debut_mpi=MPI_Wtime();
if(myid==0)
{
cout<<"\n\t\t *### Lancement du traitement parallel ###* \n\t\t *****************************************\n\v";
cout<<"\n\t\t *******( "<<p<<" processus lancés )*********\n\v ";


//MPI_Ssend(tab2,(M*N), MPI_FLOAT, 1, 6, MPI_COMM_WORLD);
imaginfo();

ftime(&debut);
}


switch(pro)

{
case 1:

if(myid==0)
{
gabor(0,6,0,4);
}
break;

case 2:

if(myid==0)
{
gabor(0,3,0,4);
}

if(myid==1)
{
gabor(3,6,0,4);
}

break;

case 3:
if(myid==0)
{
gabor(0,2,0,4);
}

if(myid==1)
{
gabor(2,4,0,4);
}

if(myid==2)
{
gabor(4,6,0,4);

}
break;

case 4:
if(myid==0)
{
gabor(0,6,0,1);
}

if(myid==1)
{
gabor(0,6,1,2);
}
if(myid==2)
{
gabor(0,6,2,3);
}

if(myid==3)
{
gabor(0,6,3,4);
}
break;

case 5:

if(myid==0)
{
gabor(0,5,0,1);
}

if(myid==1)
{
gabor(0,5,1,2);
}
if(myid==2)
{
gabor(0,5,2,3);
}

if(myid==3)
{
gabor(0,5,3,4);
}

if(myid==4)
{
gabor(5,6,0,4);
}
break;

case 6:

if(myid==0)
{
gabor(0,1,0,4);
}

if(myid==1)
{
gabor(1,2,0,4);
}
if(myid==2)
{
gabor(2,3,0,4);
}

if(myid==3)
{
gabor(3,4,0,4);
}

if(myid==4)
{
gabor(4,5,0,4);
}
if(myid==5)
{
gabor(5,6,0,4);
}

break;

case 7:

if(myid==0)
{
gabor(0,1,0,3);
}

if(myid==1)
{
gabor(1,2,0,3);
}
if(myid==2)
{
gabor(2,3,0,3);
}

if(myid==3)
{
gabor(3,4,0,3);
}

if(myid==4)
{
gabor(4,5,0,4);
}
if(myid==5)
{
gabor(5,6,0,4);
}
if(myid==6)
{
gabor(0,4,3,4);
}

break;

case 8:

if(myid==0)
{
gabor(0,3,0,1);
}

if(myid==1)
{
gabor(0,3,1,2);
}
if(myid==2)
{
gabor(0,3,2,3);
}

if(myid==3)
{
gabor(0,3,3,4);
}

if(myid==4)
{
gabor(3,6,0,1);
}
if(myid==5)
{
gabor(3,6,1,2);
}
if(myid==6)
{
gabor(3,6,2,3);
}
if(myid==7)
{
gabor(3,6,3,4);
}

break;

case 9:
if(myid==0)
{
gabor(0,3,0,1);
}

if(myid==1)
{
gabor(0,3,1,2);
}
if(myid==2)
{
gabor(0,3,2,3);
}

if(myid==3)
{
gabor(0,3,3,4);
}

if(myid==4)
{
gabor(3,6,0,1);
}
if(myid==5)
{
gabor(3,6,1,2);
}
if(myid==6)
{
gabor(0,2,3,4);
}
if(myid==7)
{
gabor(2,4,3,4);
}
if(myid==8)
{
gabor(4,6,3,4);
}

break;

case 10:

if(myid==0)
{
gabor(0,3,0,1);
}

if(myid==1)
{
gabor(3,6,0,1);
}
if(myid==2)
{
gabor(0,3,1,2);
}

if(myid==3)
{
gabor(3,6,1,2);
}

if(myid==4)
{
gabor(0,2,2,3);
}
if(myid==5)
{
gabor(2,4,2,3);
}
if(myid==6)
{
gabor(4,6,2,3);
}
if(myid==7)
{
gabor(0,2,3,4);
}
if(myid==8)
{
gabor(2,4,3,4);
}
if(myid==9)
{
gabor(4,6,3,4);
}

break;

case 11:

if(myid==0)
{
gabor(0,3,0,1);
}

if(myid==1)
{
gabor(3,6,0,1);
}
if(myid==2)
{
gabor(0,2,1,2);
}

if(myid==3)
{
gabor(2,4,1,2);
}

if(myid==4)
{
gabor(4,6,1,2);
}
if(myid==5)
{
gabor(0,2,2,3);
}
if(myid==6)
{
gabor(2,4,2,3);
}
if(myid==7)
{
gabor(4,6,2,3);
}
if(myid==8)
{
gabor(0,2,3,4);
}
if(myid==9)
{
gabor(2,4,3,4);
}
if(myid==10)
{
gabor(4,6,3,4);
}

break;

case 12:

if(myid==0)
{
gabor(0,1,0,2);
}

if(myid==1)
{
gabor(1,2,0,2);
}
if(myid==2)
{
gabor(2,3,0,2);
}

if(myid==3)
{
gabor(3,4,0,2);
}

if(myid==4)
{
gabor(4,5,0,2);
}
if(myid==5)
{
gabor(5,6,0,2);
}
if(myid==6)
{
gabor(0,1,2,4);
}
if(myid==7)
{
gabor(1,2,2,4);
}
if(myid==8)
{
gabor(2,3,2,4);
}
if(myid==9)
{
gabor(3,4,2,4);
}
if(myid==10)
{
gabor(4,5,2,4);
}

if(myid==11)
{
gabor(5,6,2,4);
}
break;

}

int deplacement=24;
MPI_Win win1, win2;
int index_to_put=8,index_to_get=8;

if(myid==0)
{
MPI_Win_create(&u, sizeof(int), deplacement,MPI_INFO_NULL ,MPI_COMM_WORLD , &win1);//win est un objet windows creer pour chaque processus
MPI_Win_create(&segma, sizeof(int), deplacement,MPI_INFO_NULL ,MPI_COMM_WORLD , &win2);
}
else {
MPI_Win_create(&u, 1000, deplacement,MPI_INFO_NULL ,MPI_COMM_WORLD , &win1);
MPI_Win_create(&segma, 1000, deplacement,MPI_INFO_NULL ,MPI_COMM_WORLD , &win2);
}

MPI_Win_fence( MPI_MODE_NOPRECEDE, win1);
if(myid!=0)
{
MPI_Put(&u,(6*4), MPI_DOUBLE, 0, index_to_put, (6*4), MPI_DOUBLE, win1);
// MPI_put(&milisec2,1, MPI_FLOAT, myid, 8, (6,4),MPI_COMM_WORLD,win);
}
MPI_Win_fence(MPI_MODE_NOPUT, win1);

MPI_Win_fence( MPI_MODE_NOPRECEDE, win2);
if(myid!=0)
{
MPI_Put(&segma,(6*4), MPI_DOUBLE, 0, index_to_put, (6*4), MPI_DOUBLE, win2);
}
MPI_Win_fence(MPI_MODE_NOPUT, win2);

MPI_Win_fence(0, win1);
if(myid==0)
{
switch (pro)
{
case 2:
{

MPI_Get(&u1,12, MPI_DOUBLE,1, index_to_get, 12, MPI_DOUBLE, win1);
//MPI_get(&temp_id1,1, MPI_FLOAT,1,index_to get ,(6*4), MPI_COMM_WORLD, win);
break;
}
case 3:
{
MPI_Get(&u1,8, MPI_DOUBLE,1, index_to_get, 8, MPI_DOUBLE, win1);
MPI_Get(&u2,8, MPI_DOUBLE,2, index_to_get, 8, MPI_DOUBLE, win1);
//MPI_get(&temp_id2,1, MPI_FLOAT,2, index_to_get,(*,4), MPI_COMM_WORLD, win);
break;
}
case 4:
{
MPI_Get(&u1,6, MPI_DOUBLE,1, index_to_get,6, MPI_DOUBLE, win1);
MPI_Get(&u2,6, MPI_DOUBLE,2, index_to_get, 6, MPI_DOUBLE, win1);
MPI_Get(&u3,6, MPI_DOUBLE,3, index_to_get, 6, MPI_DOUBLE, win1);
//MPI_get(&temp_id2,1, MPI_FLOAT,3, index_to_get,(6*4), MPI_COMM_WORLD, win);

break;
}
case 5:
{
MPI_Get(&u1,5, MPI_DOUBLE,1, index_to_get, 5, MPI_DOUBLE, win1);
MPI_Get(&u2,4, MPI_DOUBLE,2, index_to_get,4, MPI_DOUBLE, win1);
MPI_Get(&u3,4, MPI_DOUBLE,3, index_to_get, 4, MPI_DOUBLE, win1);
MPI_Get(&u4,4, MPI_DOUBLE,4, index_to_get,4, MPI_DOUBLE, win1);
//MPI_get(&temp_id2,1, MPI_FLOAT,4, index_to get, (6*4),MPI_COMM_WORLD, win);


break;
}
case 6:
{
MPI_Get(&u1,4, MPI_DOUBLE,1, index_to_get, 4, MPI_DOUBLE, win1);
MPI_Get(&u2,4, MPI_DOUBLE,2, index_to_get,4, MPI_DOUBLE, win1);
MPI_Get(&u3,4, MPI_DOUBLE,3, index_to_get, 4, MPI_DOUBLE, win1);
MPI_Get(&u4,4, MPI_DOUBLE,4, index_to_get,4, MPI_DOUBLE, win1);
MPI_Get(&u5,4, MPI_DOUBLE,5, index_to_get, 4, MPI_DOUBLE, win1);
//MPI_get(&temp_id2,1, MPI_FLOAT,5,index_to_get , (6*4),MPI_COMM_WORLD, win);


break;
}
case 7:
{
MPI_Get(&u1,3, MPI_DOUBLE,1, index_to_get, 3, MPI_DOUBLE, win1);
MPI_Get(&u2,3, MPI_DOUBLE,2, index_to_get,3, MPI_DOUBLE, win1);
MPI_Get(&u3,3, MPI_DOUBLE,3, index_to_get, 3, MPI_DOUBLE, win1);
MPI_Get(&u4,4, MPI_DOUBLE,4, index_to_get,4, MPI_DOUBLE, win1);
MPI_Get(&u5,4, MPI_DOUBLE,5, index_to_get, 4, MPI_DOUBLE, win1);
MPI_Get(&u6,4, MPI_DOUBLE,6, index_to_get, 4, MPI_DOUBLE, win1);
//MPI_get(&temp_id2,1, MPI_FLOAT,6, index_to_get,(6*4), MPI_COMM_WORLD,win);

break;
}
case 8:
{
MPI_Get(&u1,3, MPI_DOUBLE,1, index_to_get, 3, MPI_DOUBLE, win1);
MPI_Get(&u2,3, MPI_DOUBLE,2, index_to_get,3, MPI_DOUBLE, win1);
MPI_Get(&u3,3, MPI_DOUBLE,3, index_to_get, 3, MPI_DOUBLE, win1);
MPI_Get(&u4,3, MPI_DOUBLE,4, index_to_get,3, MPI_DOUBLE, win1);
MPI_Get(&u5,3, MPI_DOUBLE,5, index_to_get, 3, MPI_DOUBLE, win1);
MPI_Get(&u6,3, MPI_DOUBLE,6, index_to_get, 3, MPI_DOUBLE, win1);
MPI_Get(&u7,3, MPI_DOUBLE,7, index_to_get, 3, MPI_DOUBLE, win1);
//MPI_get(&temp_id2,1, MPI_FLOAT,7, index_to_get, (6*4),MPI_COMM_WORLD, win);


break;
}
case 9:
{
MPI_Get(&u1,3, MPI_DOUBLE,1, index_to_get, 3, MPI_DOUBLE, win1);
MPI_Get(&u2,3, MPI_DOUBLE,2, index_to_get,3, MPI_DOUBLE, win1);
MPI_Get(&u3,3, MPI_DOUBLE,3, index_to_get, 3, MPI_DOUBLE, win1);
MPI_Get(&u4,3, MPI_DOUBLE,4, index_to_get,3, MPI_DOUBLE, win1);
MPI_Get(&u5,3, MPI_DOUBLE,5, index_to_get, 3, MPI_DOUBLE, win1);
MPI_Get(&u6,2, MPI_DOUBLE,6, index_to_get, 2, MPI_DOUBLE, win1);
MPI_Get(&u7,2, MPI_DOUBLE,7, index_to_get, 2, MPI_DOUBLE, win1);
MPI_Get(&u8,2, MPI_DOUBLE,8, index_to_get, 2, MPI_DOUBLE, win1);
//MPI_get(&temp_id2,1, MPI_FLOAT,8, index_to_get,(6*4), MPI_COMM_WORLD, win);

break;
}

case 10:
{
MPI_Get(&u1,3, MPI_DOUBLE,1, index_to_get, 3, MPI_DOUBLE, win1);
MPI_Get(&u2,3, MPI_DOUBLE,2, index_to_get,3, MPI_DOUBLE, win1);

MPI_Get(&u3,3, MPI_DOUBLE,3, index_to_get, 3, MPI_DOUBLE, win1);
MPI_Get(&u4,2, MPI_DOUBLE,4, index_to_get,2, MPI_DOUBLE, win1);

MPI_Get(&u5,2, MPI_DOUBLE,5, index_to_get, 2, MPI_DOUBLE, win1);

MPI_Get(&u6,2, MPI_DOUBLE,6, index_to_get, 2, MPI_DOUBLE, win1);
MPI_Get(&u7,2, MPI_DOUBLE,7, index_to_get, 2, MPI_DOUBLE, win1);
MPI_Get(&u8,2, MPI_DOUBLE,8, index_to_get, 2, MPI_DOUBLE, win1);
MPI_Get(&u9,2, MPI_DOUBLE,9, index_to_get, 2, MPI_DOUBLE, win1);
//MPI_get(&temp_id2,1, MPI_FLOAT,9, index_to_get,(6*4), MPI_COMM_WORLD,win );

break;
}
case 11:
{
MPI_Get(&u1,3, MPI_DOUBLE,1, index_to_get, 3, MPI_DOUBLE, win1);
MPI_Get(&u2,3, MPI_DOUBLE,2, index_to_get,3, MPI_DOUBLE, win1);
MPI_Get(&u3,2, MPI_DOUBLE,3, index_to_get, 2, MPI_DOUBLE, win1);
MPI_Get(&u4,2, MPI_DOUBLE,4, index_to_get,2, MPI_DOUBLE, win1);
MPI_Get(&u5,2, MPI_DOUBLE,5, index_to_get, 2, MPI_DOUBLE, win1);
MPI_Get(&u6,2, MPI_DOUBLE,6, index_to_get, 2, MPI_DOUBLE, win1);
MPI_Get(&u7,2, MPI_DOUBLE,7, index_to_get, 2, MPI_DOUBLE, win1);
MPI_Get(&u8,2, MPI_DOUBLE,8, index_to_get, 2, MPI_DOUBLE, win1);
MPI_Get(&u9,2, MPI_DOUBLE,9, index_to_get, 2, MPI_DOUBLE, win1);
MPI_Get(&u10,2, MPI_DOUBLE,10, index_to_get, 2, MPI_DOUBLE, win1);
//MPI_get(&temp_id2,1, MPI_FLOAT,10, index_to_get, (6*4),MPI_COMM_WORLD, win);

break;
}

case 12:
{
MPI_Get(&u1,2, MPI_DOUBLE,1, index_to_get, 2, MPI_DOUBLE, win1);
MPI_Get(&u2,2, MPI_DOUBLE,2, index_to_get,2, MPI_DOUBLE, win1);
MPI_Get(&u3,2, MPI_DOUBLE,3, index_to_get, 2, MPI_DOUBLE, win1);
MPI_Get(&u4,2, MPI_DOUBLE,4, index_to_get,2, MPI_DOUBLE, win1);
MPI_Get(&u5,2, MPI_DOUBLE,5, index_to_get, 2, MPI_DOUBLE, win1);
MPI_Get(&u6,2, MPI_DOUBLE,6, index_to_get, 2, MPI_DOUBLE, win1);
MPI_Get(&u7,2, MPI_DOUBLE,7, index_to_get, 2, MPI_DOUBLE, win1);
MPI_Get(&u8,2, MPI_DOUBLE,8, index_to_get, 2, MPI_DOUBLE, win1);
MPI_Get(&u9,2, MPI_DOUBLE,9, index_to_get, 2, MPI_DOUBLE, win1);
MPI_Get(&u10,2, MPI_DOUBLE,10, index_to_get, 2, MPI_DOUBLE, win1);
MPI_Get(&u11,2, MPI_DOUBLE,11, index_to_get, 2, MPI_DOUBLE, win1);
//MPI_get(&temp_id2,1, MPI_FLOAT,11, index_to_get,(6*4), MPI_COMM_WORLD, win);

break;
}
}
}
MPI_Win_fence(0, win1);

MPI_Win_fence(0, win2);
if(myid==0)
{
switch (pro)
{
case 2:
{
MPI_Get(&segma1,12, MPI_DOUBLE,1, index_to_get, 12, MPI_DOUBLE, win2);
break;
}
case 3:
{
MPI_Get(&segma1,8, MPI_DOUBLE,1, index_to_get, 8, MPI_DOUBLE, win2);
MPI_Get(&segma2,8, MPI_DOUBLE,2, index_to_get, 8, MPI_DOUBLE, win2);

break;
}
case 4:
{
MPI_Get(&segma1,6, MPI_DOUBLE,1, index_to_get, 6, MPI_DOUBLE, win2);
MPI_Get(&segma2,6, MPI_DOUBLE,2, index_to_get, 6, MPI_DOUBLE, win2);
MPI_Get(&segma3,6, MPI_DOUBLE,3, index_to_get, 6, MPI_DOUBLE, win2);

break;
}
case 5:
{
MPI_Get(&segma1,5, MPI_DOUBLE,1, index_to_get, 5, MPI_DOUBLE, win2);
MPI_Get(&segma2,5, MPI_DOUBLE,2, index_to_get, 5, MPI_DOUBLE, win2);
MPI_Get(&segma3,5, MPI_DOUBLE,3, index_to_get, 5, MPI_DOUBLE, win2);
MPI_Get(&segma4,4, MPI_DOUBLE,4, index_to_get, 4, MPI_DOUBLE, win2);

break;
}
case 6:
{
MPI_Get(&segma1,4, MPI_DOUBLE,1, index_to_get, 4, MPI_DOUBLE, win2);
MPI_Get(&segma2,4, MPI_DOUBLE,2, index_to_get, 4, MPI_DOUBLE, win2);
MPI_Get(&segma3,4, MPI_DOUBLE,3, index_to_get, 4, MPI_DOUBLE, win2);

MPI_Get(&segma4,4, MPI_DOUBLE,4, index_to_get, 4, MPI_DOUBLE, win2);
MPI_Get(&segma5,4, MPI_DOUBLE,5, index_to_get, 4, MPI_DOUBLE, win2);

break;
}
case 7:
{
MPI_Get(&segma1,3, MPI_DOUBLE,1, index_to_get, 3, MPI_DOUBLE, win2);
MPI_Get(&segma2,3, MPI_DOUBLE,2, index_to_get, 3, MPI_DOUBLE, win2);
MPI_Get(&segma3,3, MPI_DOUBLE,3, index_to_get, 3, MPI_DOUBLE, win2);

MPI_Get(&segma4,4, MPI_DOUBLE,4, index_to_get, 4, MPI_DOUBLE, win2);
MPI_Get(&segma5,4, MPI_DOUBLE,5, index_to_get, 4, MPI_DOUBLE, win2);
MPI_Get(&segma6,4, MPI_DOUBLE,6, index_to_get, 4, MPI_DOUBLE, win2);

break;
}
case 8:
{
MPI_Get(&segma1,3, MPI_DOUBLE,1, index_to_get,3, MPI_DOUBLE, win2);
MPI_Get(&segma2,3, MPI_DOUBLE,2, index_to_get, 3, MPI_DOUBLE, win2);
MPI_Get(&segma3,3, MPI_DOUBLE,3, index_to_get, 3, MPI_DOUBLE, win2);

MPI_Get(&segma4,3, MPI_DOUBLE,4, index_to_get, 3, MPI_DOUBLE, win2);
MPI_Get(&segma5,3, MPI_DOUBLE,5, index_to_get, 3, MPI_DOUBLE, win2);
MPI_Get(&segma6,3, MPI_DOUBLE,6, index_to_get, 3, MPI_DOUBLE, win2);
MPI_Get(&segma7,3, MPI_DOUBLE,7, index_to_get, 3, MPI_DOUBLE, win2);


break;
}
case 9:
{
MPI_Get(&segma1,3, MPI_DOUBLE,1, index_to_get, 3, MPI_DOUBLE, win2);
MPI_Get(&segma2,3, MPI_DOUBLE,2, index_to_get, 3, MPI_DOUBLE, win2);
MPI_Get(&segma3,3, MPI_DOUBLE,3, index_to_get, 3, MPI_DOUBLE, win2);

MPI_Get(&segma4,3, MPI_DOUBLE,4, index_to_get, 3, MPI_DOUBLE, win2);
MPI_Get(&segma5,3, MPI_DOUBLE,5, index_to_get, 3, MPI_DOUBLE, win2);
MPI_Get(&segma6,2, MPI_DOUBLE,6, index_to_get, 2, MPI_DOUBLE, win2);
MPI_Get(&segma7,2, MPI_DOUBLE,7, index_to_get,2, MPI_DOUBLE, win2);
MPI_Get(&segma8,2, MPI_DOUBLE,8, index_to_get, 2, MPI_DOUBLE, win2);

break;
}
case 10:
{
MPI_Get(&segma1,3, MPI_DOUBLE,1, index_to_get, 3, MPI_DOUBLE, win2);
MPI_Get(&segma2,3, MPI_DOUBLE,2, index_to_get, 3, MPI_DOUBLE, win2);
MPI_Get(&segma3,3, MPI_DOUBLE,3, index_to_get, 3, MPI_DOUBLE, win2);

MPI_Get(&segma4,2, MPI_DOUBLE,4, index_to_get, 2, MPI_DOUBLE, win2);
MPI_Get(&segma5,2, MPI_DOUBLE,5, index_to_get, 2, MPI_DOUBLE, win2);
MPI_Get(&segma6,2, MPI_DOUBLE,6, index_to_get,2, MPI_DOUBLE, win2);
MPI_Get(&segma7,2, MPI_DOUBLE,7, index_to_get, 2, MPI_DOUBLE, win2);
MPI_Get(&segma8,2, MPI_DOUBLE,8, index_to_get, 2, MPI_DOUBLE, win2);
MPI_Get(&segma9,2, MPI_DOUBLE,9, index_to_get, 2, MPI_DOUBLE, win2);

break;
}case 11:
{
MPI_Get(&segma1,3, MPI_DOUBLE,1, index_to_get, 3, MPI_DOUBLE, win2);
MPI_Get(&segma2,3, MPI_DOUBLE,2, index_to_get, 3, MPI_DOUBLE, win2);
MPI_Get(&segma3,2, MPI_DOUBLE,3, index_to_get, 2, MPI_DOUBLE, win2);

MPI_Get(&segma4,2, MPI_DOUBLE,4, index_to_get, 2, MPI_DOUBLE, win2);
MPI_Get(&segma5,2, MPI_DOUBLE,5, index_to_get, 2, MPI_DOUBLE, win2);
MPI_Get(&segma6,2, MPI_DOUBLE,6, index_to_get,2, MPI_DOUBLE, win2);
MPI_Get(&segma7,2, MPI_DOUBLE,7, index_to_get, 2, MPI_DOUBLE, win2);
MPI_Get(&segma8,2, MPI_DOUBLE,8, index_to_get, 2, MPI_DOUBLE, win2);
MPI_Get(&segma9,2, MPI_DOUBLE,9, index_to_get, 2, MPI_DOUBLE, win2);
MPI_Get(&segma10,2, MPI_DOUBLE,10, index_to_get, 2, MPI_DOUBLE, win2);
break;
}
case 12:
{

MPI_Get(&segma1,2, MPI_DOUBLE,1, index_to_get, 2, MPI_DOUBLE, win2);
MPI_Get(&segma2,2, MPI_DOUBLE,2, index_to_get,2, MPI_DOUBLE, win2);
MPI_Get(&segma3,2, MPI_DOUBLE,3, index_to_get, 2, MPI_DOUBLE, win2);

MPI_Get(&segma4,2, MPI_DOUBLE,4, index_to_get, 2, MPI_DOUBLE, win2);
MPI_Get(&segma5,2, MPI_DOUBLE,5, index_to_get, 2, MPI_DOUBLE, win2);
MPI_Get(&segma6,2, MPI_DOUBLE,6, index_to_get,2, MPI_DOUBLE, win2);
MPI_Get(&segma7,2, MPI_DOUBLE,7, index_to_get, 2, MPI_DOUBLE, win2);
MPI_Get(&segma8,2, MPI_DOUBLE,8, index_to_get, 2, MPI_DOUBLE, win2);
MPI_Get(&segma9,2, MPI_DOUBLE,9, index_to_get, 2, MPI_DOUBLE, win2);
MPI_Get(&segma10,2, MPI_DOUBLE,10, index_to_get, 2, MPI_DOUBLE, win2);
MPI_Get(&segma11,2, MPI_DOUBLE,11, index_to_get, 2, MPI_DOUBLE, win2);
break;
}
}
}
MPI_Win_fence(0, win2);
MPI_Win_free(&win1);
MPI_Win_free(&win2);

if(myid==0)
{
ftime(&fin);
milisec2=(fin.time-debut.time)*1000L +(fin.millitm-debut.millitm);

cout<<"\n\v\t\t\t\tLe Vecteur resultant est :\n";
for(m=0;m<lob; m++)
for(n=0;n<orienta; n++)
{
u[m][n]=u[m][n]+u1[m][n]+u2[m][n]+u3[m][n]+u4[m][n]+u5[m][n]+u6[m][n]+u7[m][n]+u8[m][n]+u9[m][n]+u10[m][n]+u11[m][n];
segma[m][n]=segma[m][n]+segma1[m][n]+segma2[m][n]+segma3[m][n]+segma4[m][n]+segma5[m][n]+segma6[m][n]+segma7[m][n]+segma8[m][n]+segma9[m][n]+segma10[m][n]+segma11[m][n];

cout<<"\n\tla moyenne ["<<m<<"]["<<n<<"] est: "<<(u[m][n])<<" ######## l'ecart type ["<<m<<"]["<<n<<"] est: "<<segma[m][n]<<endl;
}

//MPI_Reduce (&temp_id, &milisec2,1,MPI_FLOAT, MPI_SUM,0, MPI_COMM_WORLD);

//milisec2=milisec2+temp_id1+temp_id2+temp_id3+temp_id4+temp_id5+temp_id6+temp_id7;

cout<<"\n\v\t fin d'execution parallel"<<endl;

//milisectot=milisec1+milisec2+milisec3;
cout<<"\n\t ===================================================================";
cout<<"\n\t *** *** Le temps du Traitement parallel est: "<<(float)milisec2/(1000)<<" sec *** *** \n";
cout<<"\t ===================================================================\n\v";
}

MPI_Finalize();

delete []tab[0];
delete []tab;
}

void ReadImage(char fname[],int& M, int& N, int& Q)
{

//struct timeb debut,fin; //structure pre-definie dans sys/timeb.h
ftime(&debut);
int i, j;
char header [100], *ptr;
ifstream ifp;
//system("cd /home/user/lastcodes");
ifp.open(fname, ios::in);
if (!ifp) {
cout << "l'image '"<< fname <<"' introuvable !, veuillez verifier l'orthographe..."<< endl;
exit(1);
}
// read header
ifp.getline(header,100,'\n');
if ( (header[0]!=80) || // 'P'
(header[1]!=53) ) //'5'
{
cout << "\nImage '" << fname << "'n'est pas du format PGM !! (ou peut etre du format PGM type 'P2')\n" << endl;
exit(1);
}

ifp.getline(header,100,'\n');
while(header[0]=='#')
ifp.getline(header,100,'\n');
M=strtol(header,&ptr,0);
N=atoi(ptr);
ifp.getline(header,100,'\n');
Q=strtol(header,&ptr,0);

//imaginfo(); // informations sur l'image (largeur,hauteur et niveau de gris)

//cout << "\n Chargement de l'image en memoire ...";
// Allocation memoire pour l'mage d'entr�
tab = new unsigned char*[N];
tab[0] = new unsigned char[M*N];
for( j=1; j<N; j++ )
tab[j] = tab[j-1]+M;

ifp.read( reinterpret_cast< char *>(tab[0]), (M*N)*sizeof(unsigned char));

if (ifp.fail()) {
cout << "Image " << fname << " has wrong size" << endl;
exit(1);
}

// Allocation memoire pour la convertion
tab2 = new float*[N];
tab2[0] = new float[M*N];
for( j=1; j<N; j++ )
tab2[j] = tab2[j-1]+M;
// convertion unsigned char vers float
for(j=0; j<N; j++)
{for(i=0; i<M; i++)
tab2[j][i]=(float)tab[j][i];}

ifp.close();
//system("clear");
ftime(&fin);
milisec1=(fin.time-debut.time)*1000L +(fin.millitm-debut.millitm);
time_t dateheure;
time(&dateheure);
//cout<<"... OK! : "<<ctime(&dateheure)<<"\n\v";
}


void imaginfo(void)
{

cout<<"\n\t *** caracteristiques initialles de l'image d'entrée : *** \n";
cout<<"\t\t\t Nom de l'image:'"<<fname<<"'\n";
cout<<"\t\t\t *********************\n";
cout<<"\t\t\t * PGM type 'P5'"<<" "<<"*\n";
cout<<"\t\t\t * largeur (M): "<<M<<" *\n";
cout<<"\t\t\t * hauteur (N): "<<N<<" *\n";
cout<<"\t\t\t * couleur (Q): "<<(Q+1)<<" *\n";
cout<<"\t\t\t *********************\n";
}


void gabor(int Minf, int Msup,int Ninf,int Nsup)
{
cout<<"\n\t\t Process :"<<myid<<" Debut du traitement ";

a=pow((float)uh/ut,(float)1/(lob-1));

//affichage de la date et l'heure.
milisec2=0;
//ftime(&debut);
for( m=Minf; m<Msup; m++ )
{
w=pow((float)a,m)*ut;segmax=((a+1)*sqrt(2*log(2))/(2*pi*pow((float)a,m)*(a-1)*ut));
segmay=1/(2*pi*tan(pi/orienta)*sqrt((pow((float)uh,2)/2*log(2))-pow((float)1/(2*pi*segmax),2)));

for( n=Ninf; n<Nsup; n++ )
{
teta=n*pi/orienta;//reg[m][n]=0;img[m][n]=0;
y=pow((float)a,-m)*(k*cos(teta)+l*sin(teta));
x=pow((float)a,-m)*(-k*sin(teta)+l*cos(teta));

repsi=pow((float)a,-m)*(1/(2*pi*segmax*segmay))*exp((-1/2)*((pow((float)y,2)/pow((float)segmay,2))+(pow((float)x,2)/pow((float)segmax,2))))*cos(2*pi*w*y);
impsi=-pow((float)a,-m)*(1/(2*pi*segmax*segmay))*exp((-1/2)*((pow((float)y,2)/pow((float)segmay,2))+(pow((float)x,2)/pow((float)segmax,2))))*sin(2*pi*w*y);

for(j=(t-1)/2;j<M-(t-1)/2;j++)
for(i=(s-1)/2;i<N-(s-1)/2; i++)
{
reg[m][n]=0;img[m][n]=0;

for( k=-(t-1)/2;k<(t-1)/2; k++ )
for( l=-(s-1)/2;l<(s-1)/2; l++ )
{
reg[m][n]+=repsi*tab2[j+k][i+l];
img[m][n]+=impsi*tab2[j+k][j+l];
}
g[m][n]=sqrt(pow((float)reg[m][n],2)+pow((float)img[m][n],2));
e[m][n]+= g[m][n];

}
u[m][n]=e[m][n]/(M*N);

for(j=(t-1)/2;j<M-(t-1)/2;j++)
for(i=(s-1)/2;i<N-(s-1)/2; i++)
{
reg[m][n]=0;img[m][n]=0;

for( k=-(t-1)/2;k<(t-1)/2; k++ )
for( l=-(s-1)/2;l<(s-1)/2; l++ )
{
reg[m][n]+=repsi*tab2[j+k][i+l];
img[m][n]+=impsi*tab2[j+k][j+l];
}
g[m][n]=sqrt(pow((float)reg[m][n],2)+pow((float)img[m][n],2));
segmaloc[m][n]+=pow((float)g[m][n]-u[m][n],2);
}
segma[m][n]=(sqrt(segmaloc[m][n]))/(M*N);
}
}
cout<<"\n\v\t\t Process :"<<myid<<" Fin du traitement "<<endl;

for(m=Minf;m<Msup; m++)
for(n=Ninf;n<Nsup; n++)
{
cout<<" la moyenne ["<<m<<"]["<<n<<"] est: "<<(u[m][n])<<" ######## la variance ["<<m<<"]["<<n<<"] est: "<<segma[m][n]<<endl;
}

// ftime(&fin);
// milisec2=(fin.time-debut.time)*1000L +(fin.millitm-debut.millitm);
}


et j'espere qu j'aurai la reponse le plus vite possible,et s'il ya d'autres questions je serai là
0