30 #include <basic/Tracer.hh>
31 #include <basic/options/option.hh>
32 #include <utility/exit.hh>
35 #include <basic/options/keys/out.OptionKeys.gen.hh>
36 #include <basic/options/keys/run.OptionKeys.gen.hh>
43 #include <utility/vector1.hh>
47 static basic::Tracer
TR(
"protocols.jd2.MPIWorkPartitionJobDistributor");
61 next_job_to_try_assigning_( 0 )
65 using namespace basic::options;
66 using namespace basic::options::OptionKeys;
67 npes_ = option[ OptionKeys::run::nproc ]();
68 rank_ = option[ OptionKeys::run::proc_id ]();
72 MPI_Comm_rank( MPI_COMM_WORLD, (
int*)( &
rank_ ) );
73 MPI_Comm_size( MPI_COMM_WORLD, (
int*)( &
npes_ ) );
80 TR <<
"RANK: " <<
rank_ <<
" NUM_PROCS: " <<
npes_ <<
" NUM_JOBS: " << jobs.size()
111 if( jobs_mod_procs == 0 ) {
117 else if(
rank_ < jobs_mod_procs ) {
118 num_jobs = (
core::Size) std::ceil( jobs_div_procs );
125 else if(
rank_ >= jobs_mod_procs ) {
126 num_jobs = (
core::Size) std::floor( jobs_div_procs );
130 utility_exit_with_message(
"ERROR: Problem determining job ids to run");
144 MPI_Barrier( MPI_COMM_WORLD );
158 !basic::options::option[ basic::options::OptionKeys::out::overwrite ].value() ) {
168 return job_to_assign;
192 TR <<
"job failed, reporting bad input; other jobs of same input will be canceled: "
199 TR <<
"job canceled without trying due to previous bad input: "