void iso_diffusion_denoising(image *u, image *u_bar, float kappa, int iters) {
int my_rank,num_procs;
float *temp;
int i,j,k=0;
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
MPI_Comm_size(MPI_COMM_WORLD, &num_procs);
int m=u->m;
int n=u->n;
//temp= malloc(n*sizeof(float));//1*n array ?
float *ptr;
for(k=0;k<iters;k++) {
for(i=1; i<m-1; i++) {
for(j=1; j<n-1; j++) {
/* temp[m-1]=u->image_data[m-1][0];
temp[m-1]=u->image_data[m-1][n-1];
temp[i]=u->image_data[m-1][j];*/
u_bar->image_data[i][j]= u->image_data[i][j] + kappa*(u->image_data[i-1][j] + u->image_data[i][j-1] - 4*u->image_data[i][j] + u->image_data[i][j+1] + u->image_data[i+1][j]);
u->image_data[i][j]=u_bar->image_data[i][j];
}
}
//temp[m-1][n-1]
if(my_rank==0) {
ptr = u->image_data[m-1];
MPI_Send(&ptr[0],n,MPI_FLOAT,1,1,MPI_COMM_WORLD);
MPI_Recv(&temp,n,MPI_FLOAT,1,2,MPI_COMM_WORLD,&status);
printf("my rank is : %d ", my_rank);
fflush(stdout);
} else if(my_rank==1) { //if(my_rank!=num_procs) {
ptr = u->image_data[0];
MPI_Send(&ptr[0],n,MPI_FLOAT,0,2,MPI_COMM_WORLD);
MPI_Recv(&temp,n,MPI_FLOAT,1,1,MPI_COMM_WORLD,&status);
printf("my rank is : %d ", my_rank);
fflush(stdout);
}
}
}
mpirun -np 2 Oblig 0.1 20 noisy denoised
my rank is : 1114636288 [safir:22140] *** Process received signal ***
--------------------------------------------------------------------------
mpirun noticed that process rank 0 with PID 22140 on node safir.ifi.uio.no exited on signal 11 (Segmentation fault).
为什么my_rank
打印出来的值非常大?我也遇到了分段错误。