我有一些设置,其中所有进程都获得了连续的工作块,并且我想在最后将所有输出一起保存为单个文件,如下所示:
int start_ind = split_work(mpi_rank, mpi_size), end_ind = split_work(mpi_rank+1, mpi_size);
vector<double> results;
for(int i=start_ind; i<end_ind; i++){
results[i] = do_work(i);
}
MPI_File handler;
MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_CREATE|MPI_MODE_WRONLY, MPI_INFO_NULL, &handler);
MPI_Status status;
MPI_File_write_at(handler, start_ind*sizeof(double), results.data()+start_ind,
end_ind - start_ind, MPI_DOUBLE, &status);
MPI_File_close(&handler);
但是,有时工作不平衡,一半的流程可以在另一半之前完成工作时间。据我所知,这些进程继续使用 100% 的 CPU 旋转数小时,直到所有进程达到MPI_File_open
. 这显然是不可取的。如果我希望输出最终成为一个文件,那么这种情况下的最佳做法是什么?