matrix6
来源:互联网 发布:jquery.highlight.js 编辑:程序博客网 时间:2024/06/08 08:48
//http://blog.csdn.net/pouloghost/article/details/7913342//oct 9 2016//jaccobi#include "mpi.h" #include <stdio.h> #include <stdlib.h> //broadcast x void bcastx(float *xs,int size) { for(int i=0;i<size;++i) { MPI_Bcast(&xs[i],1,MPI_FLOAT,i,MPI_COMM_WORLD); } } //while condition static inline int condition(int send) { int recv=0; MPI_Allreduce(&send,&recv,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD); return recv; } int main(int argc,char *argv[]) { float equs[][3]={{2,1,3}, {3,2,4}}; //threshold float thd=0.1; int self,size; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD,&self); MPI_Comm_size(MPI_COMM_WORLD,&size); //store every x float *xs=(float*)malloc(size*sizeof(float)); float nx; //init for(int i=0;i<size;++i) { xs[i]=0; } int con=1; while(0!=condition(con)) { nx=equs[self][size]; //calculate only use the correspond equivalent for(int i=0;i<size;++i) { if(self!=i) { nx-=equs[self][i]*xs[i]; } } nx/=equs[self][self]; //get the positive different float diff=nx-xs[self]; if(diff<0) { diff*=-1; } //update local x xs[self]=nx; //loop condition con=diff>thd?1:0; //update all xs bcastx(xs,size); } printf("%d,%f \n",self,nx); free(xs); MPI_Finalize(); return 0; }
0 0