我想使用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;
}
所以我的问题是我如何才能将“开始”和“结束”过程传输到其他进程,以便他们使用它们来继续工作(对向量进行排序)。
我想要的是每个进程都可以在向量的一部分上工作。