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
原创粉丝点击