33 #include <basic/Tracer.hh>
36 #include <utility/exit.hh>
38 #include <utility/assert.hh>
43 #include <utility/vector1.hh>
44 #include <basic/options/keys/OptionKeys.hh>
47 static basic::Tracer
TR(
"protocols.UnfoldedStateEnergyCalculator.UnfoldedStateEnergyCalculatorMPIWorkPoolJobDistributor");
50 namespace unfolded_state_energy_calculator {
52 using namespace basic::options;
53 using namespace basic::options::OptionKeys;
57 MPIWorkPoolJobDistributor()
71 using namespace core::scoring;
72 using namespace protocols::jd2;
74 runtime_assert(
rank_ == 0 );
91 TR <<
"Master Node: Waiting for job requests..." << std::endl;
92 MPI_Recv( &slave_data, 1, MPI_INT,
MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
93 TR <<
"Master Node: Received message from " << status.MPI_SOURCE <<
" with tag " << status.MPI_TAG << std::endl;
96 switch ( status.MPI_TAG ) {
103 TR <<
"Master Node: Received job failure message for job id " << slave_data <<
" from node " << status.MPI_SOURCE << std::endl;
108 TR <<
"Master Node: Received job success message for job id " << slave_data <<
" from node " << status.MPI_SOURCE <<
" blocking till output is done " << std::endl;
110 MPI_Recv( &slave_data, 1, MPI_INT, status.MPI_SOURCE,
JOB_SUCCESS_TAG, MPI_COMM_WORLD, &status);
111 TR <<
"Master Node: Received job output finish messege for job id " << slave_data <<
" from node " << status.MPI_SOURCE << std::endl;
114 TR <<
"Master Node: Received unfolded energy data message for job id " << slave_data <<
" from node " << status.MPI_SOURCE <<
" waiting for data " << std::endl;
116 slave_data_emap.clear(); slave_tlc_string.clear();
126 slave_tlc_string += slave_tlc_vector[i];
134 slave_data_emap[
ScoreType( i ) ] = slave_data_vector[ i - 1 ];
139 TR <<
"Master Node: Finished receiving energy data message for job id " << slave_data <<
" from node " << status.MPI_SOURCE << std::endl;
142 TR <<
"Master Node: Received unfolded energy terms message for job id " << slave_data <<
" from node " << status.MPI_SOURCE <<
" waiting for data " << std::endl;
144 slave_data_emap.clear();
154 slave_data_emap[
ScoreType( i ) ] = slave_data_vector[ i - 1 ];
159 TR <<
"Master Node: Finished receiving energy terms message for job id " << slave_data <<
" from node " << status.MPI_SOURCE << std::endl;
163 TR <<
"Master Node: Finished handing out jobs" << std::endl;
168 while ( n_nodes_left_to_spin_down > 0 ) {
169 TR <<
"Master Node: Waiting for " << n_nodes_left_to_spin_down <<
" slaves to finish jobs" << std::endl;
170 MPI_Recv( &slave_data, 1, MPI_INT,
MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
171 TR <<
"Master Node: Recieved message from " << status.MPI_SOURCE <<
" with tag " << status.MPI_TAG << std::endl;
174 switch ( status.MPI_TAG ) {
176 TR <<
"Master Node: Sending spin down signal to node " << status.MPI_SOURCE << std::endl;
178 n_nodes_left_to_spin_down--;
183 TR <<
"Master Node: Received job success message for job id " << slave_data <<
" from node " << status.MPI_SOURCE <<
" blocking till output is done " << std::endl;
185 MPI_Recv( &slave_data, 1, MPI_INT, status.MPI_SOURCE,
JOB_SUCCESS_TAG, MPI_COMM_WORLD, &status);
186 TR <<
"Master Node: Received job output finish messege for job id " << slave_data <<
" from node " << status.MPI_SOURCE << std::endl;
189 TR <<
"Master Node: Received unfolded energy data message for job id " << slave_data <<
" from node " << status.MPI_SOURCE <<
" waiting for data " << std::endl;
191 slave_data_emap.clear(); slave_tlc_string.clear();
201 slave_tlc_string += slave_tlc_vector[i];
209 slave_data_emap[
ScoreType( i ) ] = slave_data_vector[ i - 1 ];
214 TR <<
"Master Node: Finished receiving energy data message for job id " << slave_data <<
" from node " << status.MPI_SOURCE << std::endl;
217 TR <<
"Master Node: Received unfolded energy terms message for job id " << slave_data <<
" from node " << status.MPI_SOURCE <<
" waiting for data " << std::endl;
219 slave_data_emap.clear();
229 slave_data_emap[
ScoreType( i ) ] = slave_data_vector[ i - 1 ];
234 TR <<
"Master Node: Finished receiving energy terms message for job id " << slave_data <<
" from node " << status.MPI_SOURCE << std::endl;
238 TR <<
"Master Node: Finished sending spin down signals to slaves" << std::endl;
242 TR <<
"Calculating averages for " << i->first << std::endl;
269 using namespace core;
270 using namespace core::scoring;
272 TR <<
"Slave Node " <<
rank_ <<
": Requesting to send unfolded energy data to master" <<std::endl;
284 TR <<
"Slave Node " <<
rank_ <<
": Sending unfolded energy data to master" <<std::endl;
288 tlc_vector[i] = tlc[i];
296 data_vector[ i - 1 ] = scores[
ScoreType( i ) ];
302 TR <<
"Slave Node " <<
rank_ <<
": Sent unfolded energy data to master" <<std::endl;
309 using namespace protocols::jd2;
321 using namespace core;
322 using namespace core::scoring;
343 using namespace core;
344 using namespace core::scoring;
346 TR <<
"Slave Node " <<
rank_ <<
": Requesting to send unfolded energy terms to master" <<std::endl;
357 TR <<
"Slave Node " <<
rank_ <<
": Sending unfolded energy terms to master" <<std::endl;
361 data_vector[ i - 1 ] = weights[
ScoreType( i ) ];
367 TR <<
"Slave Node " <<
rank_ <<
": Sent unfolded energy terms to master" <<std::endl;