高斯消元_mpi
#include<stdio.h>
#include<mpi.h>
#include<stdlib.h>
#include<math.h>
#define M 5
int main(int argc,char *argv[]){
int myid,numprocs,namelen,cpuname;
MPI_Status status;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
int i,j,k,n,temp;
int a[M][M],b[M];
if(!myid) {
for(i = 0;i < M-1;i++) {
printf("please input the %d row :\n",i+1);
for(j = 0;j < M;j++) {
scanf("%d",&a[i][j]);
}
printf("\n");
}
MPI_Send(a,M*M,MPI_INT,1,99,MPI_COMM_WORLD);
}
else{
MPI_Recv(a,M*M,MPI_INT,myid-1,99,MPI_COMM_WORLD,&status);
printf("经过第%d次消元后的结果是\n",myid);
for(j = myid;j < M-1;j++){
temp = a[j][myid-1]/a[myid-1][myid-1];
for(k = 0;k < M;k++){
a[j][k] = a[j][k] - temp*a[myid-1][k];
}
}
for(i = 0;i < M-1;i++){
for(j =0;j < M;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("\n");
if(myid < M-2) {
MPI_Send(a,M*M,MPI_INT,myid+1,99,MPI_COMM_WORLD);
}
if(myid == M-2){
for(i = M-2;i+1;i--){
temp = a[i][M-1];
for(j = M-2;j > i;j--){
temp = temp - a[i][j]*b[j];
}
b[i] = temp/a[i][i];
}
for(i = 0;i < M-1;i++){
printf("x%d = %d\n",i+1,b[i]);
}
}
}
MPI_Finalize();
}