У меня есть некоторая настройка, в которой все процессы получают последовательный кусок работы, и я хочу сохранить весь вывод вместе в конце как один файл, например следующий:
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% ЦП в течение нескольких часов, пока все процессы не достигнут MPI_File_open
. Это явно нежелательно. Какова наилучшая практика для такого случая, если я хочу, чтобы вывод был одним файлом?