myBcast.h
上传用户:xhsolar213
上传日期:2022-08-01
资源大小:1k
文件大小:1k
源码类别:

并行计算

开发平台:

C/C++

  1. /*--------------------------------------------------------------------------------
  2. ---                                Calculo paralelo                            ---
  3. ---                         Licenciatura en Bioinformatica                     --- 
  4. ---                             Alumno: German Gonzalez                        ---
  5. ----------------------------------------------------------------------------------*/
  6. #include <vector>
  7. using namespace std;
  8. double myBcast(vector <int> &v, int &n, int numprocs, int myrank) 
  9.  int n1=0, n2=numprocs;
  10.  double starttime, endtime, time;
  11.  MPI_Status status;
  12.  
  13.  MPI_Barrier(MPI_COMM_WORLD);    //Barrera
  14.  starttime = MPI_Wtime();        //Empiezo a medir el tiempo
  15.  
  16.  while (n2-n1>1) 
  17.  {
  18.   int middle = (n1+n2)/2;
  19.  
  20.   if (myrank==n1) 
  21.     MPI_Send(&v.at(0), n, MPI_INT,middle, 1, MPI_COMM_WORLD); 
  22.   else if (myrank==middle) 
  23.   {
  24.     v.resize(n); 
  25.     MPI_Recv(&v.at(0), n, MPI_INT, n1, MPI_ANY_TAG, MPI_COMM_WORLD, &status); 
  26.   }
  27.   if (myrank<middle) n2 = middle;
  28.   else n1=middle;
  29.  }
  30.  
  31.  MPI_Barrier(MPI_COMM_WORLD);   //Barrera
  32.  endtime = MPI_Wtime();         //Termino de medir el tiempo
  33.  time = endtime-starttime;
  34.  
  35.  return time;