У меня есть программа на C ++, которая использует MPI и openMP и работает примерно так:
Some_stuff_done_by_all_ranks();
Comm.Barrier(); //wait until stuff is done by all ranks
if (rank==0)
{
very_slow_function(); //but efficiently parallelizable with openMP
}
Comm.Barrier() //All ranks wait until the function is done
Comm.Bcast(result_of_for_loop,0) // Bring the result of very_slow_function() from rank 0 to other ranks
Some_more_stuff_done_by_all_ranks();
Когда выполняется very_slow_funtion (), все другие процессы MPI ожидают его результата, поэтому в основном все эти процессоры ничего не делают. Мне было интересно, есть ли способ для ранга 0 временно получить ресурсы, выделенные для остальных процессов MPI, чтобы эта функция могла работать быстрее.
Большое спасибо,
Joan