Probleme d'execution d'un programme
Fermé
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...........
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...........
A voir également:
- Probleme d'execution d'un programme
- Programme demarrage windows 10 - Guide
- Mettre en veille un programme - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Forcer la fermeture d'un programme - Guide
- Desinstaller un programme - Guide
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
25 mai 2008 à 12:34
La ponctuation existe. Vite une aspirine...
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
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û
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û
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à
#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à