MPI-确保变量值始终保持不变

时间:2019-03-16 15:15:41

标签: c++ vector mpi

我想使用mpi对向量进行排序。 使用的代码如下:

//here a sort lambda function   

auto sort = [](auto begin, auto end){
  ...........................
};

//Entering the main
int main(int argc, char* argv[]) {

  std::vector<int> vec(SIZE);
  random_vector(begin(vec), end(vec)); // a vector with random values
  auto incre;
  auto begin = vec.begin(), end = vec.begin + incre;


  int my_rank; /* rank of the process     */
  int p;       /* number of processes  */
  int source;  /* source's rank   */
  int dest;    /* destination's rank     */
  int tag = 0; /*  just a tag*/
  MPI_Status status;

  /* Initialisation  */
  MPI_Init(&argc, &argv);
  MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
  MPI_Comm_size(MPI_COMM_WORLD, &p);

  incre = SIZE / p;

  if (my_rank != 0) {

    dest = 0; 
    sort_function(begin, end);
    MPI_Send(begin, begin + SIZE / p, MPI_INT, dest, tag, MPI_COMM_WORLD);

    /* want to do this but this cannot be done */
    begin = end;
    end += incre;
    /*******************************************/

  } 
  else {
    for (source = 1; source < p; source++) {
      MPI_Recv(vec.begin(), SIZE, MPI_INT, source, tag, MPI_COMM_WORLD, &status); 
    }
  }

  MPI_Finalize();
  return 0;
}

所以我的问题是我如何才能将“开始”和“结束”过程传输到其他进程,以便他们使用它们来继续工作(对向量进行排序)。

我想要的是每个进程都可以在向量的一部分上工作。

0 个答案:

没有答案