Probleme d'execution d'un programme

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...........
Configuration: Windows XP
Internet Explorer 6.0

2 réponses

  1. Modérateur
    La ponctuation existe. Vite une aspirine...
    0
    1. 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
      1. 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