Rosetta  2020.37
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Protected Member Functions | Private Types | Private Attributes | Friends | List of all members
protocols::jd2::MPIFileBufJobDistributor Class Reference

#include <MPIFileBufJobDistributor.hh>

Inheritance diagram for protocols::jd2::MPIFileBufJobDistributor:
Inheritance graph
[legend]

Public Member Functions

 ~MPIFileBufJobDistributor () override
 dtor WARNING WARNING! SINGLETONS' DESTRUCTORS ARE NEVER CALLED IN MINI! DO NOT TRY TO PUT THINGS IN THIS FUNCTION! here's a nice link explaining why: http://www.research.ibm.com/designpatterns/pubs/ph-jun96.txt More...
 
core::Size increment_client_rank ()
 
core::Size min_client_rank () const
 return rank of first worker process (there might be more dedicated processes, e.g., ArchiveManager...) More...
 
void go (protocols::moves::MoverOP mover) override
 dummy for master/slave version More...
 
core::Size get_new_job_id () override
 dummy for master/slave version More...
 
void mark_current_job_id_for_repetition () override
 dummy for master/slave version More...
 
void remove_bad_inputs_from_job_list () override
 dummy for master/slave version More...
 
void job_succeeded (core::pose::Pose &pose, core::Real runtime, std::string const &tag) override
 dummy for master/slave version More...
 
void job_failed (core::pose::Pose &pose, bool will_retry) override
 This function is called when we give up on the job; it has been virtualized so BOINC and MPI can delay/protect output. More...
 
- Public Member Functions inherited from protocols::jd2::JobDistributor
virtual ~JobDistributor ()
 
void go (protocols::moves::MoverOP mover, JobOutputterOP jo)
 invokes go, after setting JobOutputter More...
 
void go (protocols::moves::MoverOP mover, JobInputterOP ji)
 invokes go, after setting JobInputter More...
 
void go (protocols::moves::MoverOP mover, JobInputterOP ji, JobOutputterOP jo)
 invokes go, after setting JobInputter and JobOutputter More...
 
virtual JobOP current_job () const
 Movers may ask their controlling job distributor for information about the current job. They may also write information to this job for later output, though this use is now discouraged as the addition of the MultiplePoseMover now means that a single job may include several separate trajectories. More...
 
virtual std::string current_output_name () const
 Movers may ask their controlling job distributor for the output name as defined by the Job and JobOutputter. More...
 
JobOutputterOP job_outputter () const
 Movers (or derived classes) may ask for the JobOutputter. More...
 
void set_job_outputter (const JobOutputterOP &new_job_outputter)
 Movers (or derived classes) may ask for the JobOutputter. More...
 
JobInputterOP job_inputter () const
 JobInputter access. More...
 
void set_job_inputter (JobInputterOP new_job_inputter)
 Set the JobInputter and reset the Job list – this is not something you want to do after go() has been called, but before it has returned. More...
 
virtual void mpi_finalize (bool finalize)
 should the go() function call MPI_finalize()? It probably should, this is true by default. More...
 
JobInputterInputSource::Enum job_inputter_input_source () const
 The input source for the current JobInputter. More...
 
virtual void restart ()
 
core::Size total_nr_jobs () const
 
core::Size current_job_id () const
 integer access - which job are we on? More...
 
std::string get_current_batch () const
 what is the current batch ? — name refers to the flag-file used for this batch More...
 
virtual void add_batch (std::string const &, core::Size id=0)
 add a new batch ( name will be interpreted as flag_file ) More...
 
core::Size current_batch_id () const
 what is the current batch number ? — refers to position in batches_ More...
 

Protected Member Functions

 MPIFileBufJobDistributor ()
 ctor is protected; singleton pattern More...
 
 MPIFileBufJobDistributor (core::Size master_rank, core::Size file_buf_rank, core::Size min_client_rank, bool start_empty=false)
 protected ctor for child-classes More...
 
void handle_interrupt () override
 This function got called when job is not yet finished and got termitated abnormaly (ctrl-c, kill etc). when implimenting it in subclasses make sure to delete all in-progress-data that your job spawns. More...
 
virtual bool process_message (core::Size msg_tag, core::Size slave_rank, core::Size slave_job_id, core::Size slave_batch_id, core::Real runtime)
 
bool next_batch () override
 switch current_batch_id_ to next batch More...
 
void master_go (protocols::moves::MoverOP mover)
 Handles the receiving of job requests and the sending of job ids to and from slaves. More...
 
core::Size master_get_new_job_id ()
 Always returns zero, simply increments next_job_to_assign_ to the next job that should be run based on what has been completeted and the overwrite flags. More...
 
core::Size slave_get_new_job_id ()
 requests, receives, and returns a new job id from the master node or returns the current job id if the repeat_job_ flag is set to true More...
 
void master_mark_current_job_id_for_repetition ()
 This should never be called as this is handled internally by the slave nodes, it utility_exits. More...
 
void slave_mark_current_job_id_for_repetition ()
 Sets the repeat_job_ flag to true. More...
 
void master_remove_bad_inputs_from_job_list ()
 Simply increments next_job_to_assign_ to the next job that should be run based on what has been completed and if the input job tag of the job marked as having bad input. More...
 
void slave_remove_bad_inputs_from_job_list ()
 Sends a message to the head node that contains the id of a job that had bad input. More...
 
void master_job_succeeded (core::pose::Pose &pose, std::string const &tag)
 This should never be called as this is handled internally by the slave nodes, it utility_exits. More...
 
void slave_job_succeeded (core::pose::Pose &pose, std::string const &tag)
 Sends a message to the head node upon successful job completion to avoid output interleaving. More...
 
void slave_to_master (core::Size tag)
 send a message to master More...
 
void send_job_to_slave (core::Size slave_rank)
 called by master to send and by slave to receive job More...
 
core::Size rank () const
 return rank of this process More...
 
core::Size master_rank () const
 return rank of master process ( where JobDistributor is running ) More...
 
core::Size file_buf_rank () const
 return rank of file-buffer process ( where output data (via ozstream )is handled ) More...
 
core::Size number_of_processors ()
 how many processes — this includes dedicated processes More...
 
core::Size n_rank ()
 how many processes — this includes dedicated processes More...
 
core::Size n_worker ()
 how many workers — important to keep track during spin-down process More...
 
void set_n_worker (core::Size setting)
 how many workers — important to keep track during spin-down process More...
 
virtual void mark_job_as_completed (core::Size job_id, core::Size batch_id, core::Real runtime)
 marks job as completed in joblist More...
 
virtual void mark_job_as_bad (core::Size job_id, core::Size batch_id)
 marks job as bad in joblist More...
 
void eat_signal (core::Size signal, int source)
 receive a certain signal and ignore it.... this is needed, for instance, when MPIArchiveJobDistributor triggers an ADD_BATCH signal by sending QUEUE_EMPTY to the ArchiveManager... More...
 
- Protected Member Functions inherited from protocols::jd2::JobDistributor
 JobDistributor ()
 Singleton instantiation pattern; Derived classes will call default ctor, but their ctors, too must be protected (and the JDFactory must be their friend.) More...
 
 JobDistributor (bool empty)
 MPIArchiveJobDistributor starts with an empty job-list... More...
 
void go_main (protocols::moves::MoverOP mover)
 Non-virtual get-job, run it, & output loop. This function is pretty generic and your subclass may be able to use it. It is NOT virtual - this implementation can be shared by (at least) the simple FileSystemJobDistributor, the MPIWorkPoolJobDistributor, and the MPIWorkPartitionJobDistributor. Do not feel that you need to use it as-is in your class - but DO plan on implementing all its functionality! More...
 
JobsContainer const & get_jobs () const
 Read access to private data for derived classes. More...
 
JobsContainerget_jobs_nonconst ()
 Jobs is the container of Job objects. More...
 
void mark_job_as_completed (core::Size job_id, core::Real run_time)
 Jobs is the container of Job objects need non-const to mark Jobs as completed on Master in MPI-JobDistributor. More...
 
void mark_job_as_bad (core::Size job_id)
 
RosettaScriptsParserOP parser () const
 Parser access. More...
 
void begin_critical_section ()
 
void end_critical_section ()
 
void set_current_job_by_index (core::Size curr_job_index)
 For derived classes that wish to invoke JobDistributor functions which use the current_job_ and current_job_id_ member variables. Note that until those functions complete, it would be a bad idea for another thread to change current_job_. More...
 
bool obtain_new_job (bool re_consider_current_job=false)
 this function updates the current_job_id_ and current_job_ fields. The boolean return states whether or not a new job was obtained (if false, quit distributing!) More...
 
virtual void job_succeeded_additional_output (core::pose::Pose &pose, std::string const &tag)
 This function is called upon a successful job completion if there are additional poses generated by the mover base implementation is just a call to the job outputter. More...
 
virtual void current_job_finished ()
 Derived classes are allowed to clean up any temporary files or data relating to the current job after the current job has completed. Called inside go_main loop. Default implementation is a no-op. More...
 
virtual void note_all_jobs_finished ()
 Derived classes are allowed to perform some kind of action when the job distributor runs out of jobs to execute. Called inside go_main. Default implementation is a no-op. More...
 
void clear_current_job_output ()
 
void check_for_parser_in_go_main ()
 Send a message to the screen indicating that the parser is in use and that the mover that's been input to go_main will not be used, but instead will be replaced by the Mover created by the parser. More...
 
bool using_parser () const
 Is the parser in use? More...
 
bool run_one_job (protocols::moves::MoverOP &mover, time_t allstarttime, std::string &last_inner_job_tag, std::string &last_output_tag, core::Size &last_batch_id, core::Size &retries_this_job, bool first_job)
 
void setup_pymol_observer (core::pose::Pose &pose)
 After the construction of the pose for this job, check the command line to determine if the pymol observer should be attached to it. More...
 
void write_output_from_job (core::pose::Pose &pose, protocols::moves::MoverOP mover_copy, protocols::moves::MoverStatus status, core::Size jobtime, core::Size &retries_this_job)
 After a job has finished running, figure out from the MoverStatus whether the pose should be written to disk (or wherever) along with any other poses that the mover might have generated along the way. More...
 
void increment_failed_jobs ()
 Increment the number of failed jobs. More...
 
core::Size get_job_time_estimate () const
 Get an estimate of the time to run an additional job. If it can't be estimated, return a time of zero. More...
 
void write_citations_and_clear_citation_tracking () const
 Write out information about all modules that have been used that should be cited, then clear the list of citations from the CitationManager. More...
 
void set_batch_id (core::Size setting)
 set current_batch_id — eg for slave nodes in MPI framework More...
 
virtual void batch_underflow ()
 if end of batches_ reached via next_batch or set_batch_id ... More...
 
virtual void load_new_batch ()
 called by next_batch() or set_batch_id() to switch-over and restart JobDistributor on new batch More...
 
core::Size nr_batches () const
 how many batches are in our list ... this can change dynamically More...
 
std::string const & batch (core::Size batch_id)
 give name of batch with given id More...
 

Private Types

typedef JobDistributor Parent
 

Private Attributes

core::Size n_rank_
 total number of processing elements More...
 
core::Size n_worker_
 
core::Size rank_
 rank of the "local" instance More...
 
core::Size slave_current_job_id_
 where slave jobs store current job id More...
 
core::Size slave_current_batch_id_
 batch_id allow to run multiple batches of jobs - More...
 
core::Real slave_current_runtime_
 runtime of last job More...
 
core::Size bad_job_id_
 where master stores next job to assign (in a good state after get_new_job_id up until it's used) More...
 
bool repeat_job_
 where slave stores whether it should repeat its current job id More...
 
core::Size jobs_assigned_
 keep some statistics about the jobs this is mostly just for silly tr.Info messages... More...
 
core::Size jobs_returned_
 jobs that have returned (either, bad or good ) More...
 
core::Size bad_input_jobs_
 jobs that have returned bad due to status BAD_INPUT More...
 
core::Size n_nodes_left_to_spin_down_
 how many more to spin down More...
 
core::Size const master_rank_
 keep here the ranks of different functional processes More...
 
core::Size const file_buf_rank_
 the File-Buffer More...
 
core::Size min_client_rank_
 the first slave node More...
 
core::Real cumulated_runtime_
 keep track of average timings for time-outs More...
 
core::Size cumulated_jobs_
 

Friends

class JobDistributorFactory
 

Additional Inherited Members

- Static Public Member Functions inherited from protocols::jd2::JobDistributor
static bool has_been_instantiated ()
 Has the job distributor been instantiated? More...
 
static JobDistributorget_instance ()
 static function to get the instance of ( pointer to) this singleton class More...
 
- Static Protected Member Functions inherited from protocols::jd2::JobDistributor
static void setup_system_signal_handler (void(*prev_fn)(int)=jd2_signal_handler)
 Setting up callback function that will be call when our process is about to terminate. This will allow us to exit propely (clean up in_progress_files/tmp files if any). More...
 
static void remove_system_signal_handler ()
 Set signal handler back to default state. More...
 
static void jd2_signal_handler (int Signal)
 Default callback function for signal handling. More...
 

Detailed Description

This JobDistributor is intended for machines where you have a large number of processors. two dedicated processes are used to handle JobDistribution and File-IO. all other processes (higher rank ) are used for computation. the file_buf_rank_ process runs the MpiFileBuffer which is at the receiving end of all ozstream output that is rerouted via MPI from the slave nodes. This means all slaves write to the same file without FileSystem congestion and interlacing in the file – IO is handled from a single dedicated process The other dedicated process (master_rank) runs the actual JobDistributor and is only used to distribute jobs to slaves and receive their notification of successful or failed execution in case you have only a small number of processors you can put say 10 MPI processes on 8 processors to get optimal CPU usage.

Member Typedef Documentation

Constructor & Destructor Documentation

protocols::jd2::MPIFileBufJobDistributor::MPIFileBufJobDistributor ( )
protected

ctor is protected; singleton pattern

constructor. Notice it calls the parent class! It also builds some internal variables for determining which processor it is in MPI land.

References min_client_rank_, n_rank_, n_worker_, and rank_.

protocols::jd2::MPIFileBufJobDistributor::MPIFileBufJobDistributor ( core::Size  master_rank,
core::Size  file_buf_rank,
core::Size  min_client_rank,
bool  start_empty = false 
)
protected

protected ctor for child-classes

constructor. Notice it calls the parent class! It also builds some internal variables for determining which processor it is in MPI land.

References min_client_rank_, n_rank_, n_worker_, and rank_.

protocols::jd2::MPIFileBufJobDistributor::~MPIFileBufJobDistributor ( )
overridedefault

dtor WARNING WARNING! SINGLETONS' DESTRUCTORS ARE NEVER CALLED IN MINI! DO NOT TRY TO PUT THINGS IN THIS FUNCTION! here's a nice link explaining why: http://www.research.ibm.com/designpatterns/pubs/ph-jun96.txt

WARNING WARNING! SINGLETONS' DESTRUCTORS ARE NEVER CALLED IN MINI! DO NOT TRY TO PUT THINGS IN THIS FUNCTION! here's a nice link explaining why: http://www.research.ibm.com/designpatterns/pubs/ph-jun96.txt

Member Function Documentation

void protocols::jd2::MPIFileBufJobDistributor::eat_signal ( core::Size  signal,
int  source 
)
protected

receive a certain signal and ignore it.... this is needed, for instance, when MPIArchiveJobDistributor triggers an ADD_BATCH signal by sending QUEUE_EMPTY to the ArchiveManager...

receive message of certain type – and ignore it ... sometimes needed in communication protocol

References protocols::jd2::MPI_JOB_DIST_TAG(), process_message(), and protocols::jd2::tr().

Referenced by protocols::jd2::archive::MPIArchiveJobDistributor::batch_underflow().

core::Size protocols::jd2::MPIFileBufJobDistributor::file_buf_rank ( ) const
inlineprotected

return rank of file-buffer process ( where output data (via ozstream )is handled )

References file_buf_rank_.

Referenced by protocols::jd2::archive::MPIArchiveJobDistributor::go().

core::Size protocols::jd2::MPIFileBufJobDistributor::get_new_job_id ( )
overridevirtual
void protocols::jd2::MPIFileBufJobDistributor::go ( protocols::moves::MoverOP  mover)
overridevirtual
void protocols::jd2::MPIFileBufJobDistributor::handle_interrupt ( )
inlineoverrideprotectedvirtual

This function got called when job is not yet finished and got termitated abnormaly (ctrl-c, kill etc). when implimenting it in subclasses make sure to delete all in-progress-data that your job spawns.

Implements protocols::jd2::JobDistributor.

Reimplemented in protocols::jd2::MPIMultiCommJobDistributor.

core::Size protocols::jd2::MPIFileBufJobDistributor::increment_client_rank ( )
inline

References min_client_rank_.

void protocols::jd2::MPIFileBufJobDistributor::job_failed ( core::pose::Pose ,
bool  will_retry 
)
overridevirtual

This function is called when we give up on the job; it has been virtualized so BOINC and MPI can delay/protect output.

Mark job as bad, so at the end of execution we know definitively how many jobs failed for any reason This function (in this classes implementation) increments the number_failed_jobs_ class variable. If you write a child JobDistributor and do not want an exception to be thrown at the end of execution if some jobs failed, be sure to override this function so that it does not increment number_failed_jobs_.

Mark job as bad, so at the end of execution we know definitively how many jobs failed for any reason

Reimplemented from protocols::jd2::JobDistributor.

Reimplemented in protocols::jd2::MPIMultiCommJobDistributor.

References protocols::jd2::JOB_FAILED_NO_RETRY, min_client_rank_, rank_, and slave_to_master().

void protocols::jd2::MPIFileBufJobDistributor::job_succeeded ( core::pose::Pose pose,
core::Real  runtime,
std::string const &  tag 
)
overridevirtual
void protocols::jd2::MPIFileBufJobDistributor::mark_current_job_id_for_repetition ( )
overridevirtual
void protocols::jd2::MPIFileBufJobDistributor::mark_job_as_bad ( core::Size  job_id,
core::Size  batch_id 
)
protectedvirtual

marks job as bad in joblist

mark job as failed — remove future versions of same input from list

Reimplemented in protocols::jd2::archive::MPIArchiveJobDistributor.

References bad_job_id_, protocols::jd2::JobDistributor::current_batch_id(), and remove_bad_inputs_from_job_list().

Referenced by protocols::jd2::archive::MPIArchiveJobDistributor::mark_job_as_bad(), and process_message().

void protocols::jd2::MPIFileBufJobDistributor::mark_job_as_completed ( core::Size  job_id,
core::Size  batch_id,
core::Real  runtime 
)
protectedvirtual
core::Size protocols::jd2::MPIFileBufJobDistributor::master_get_new_job_id ( )
protected

Always returns zero, simply increments next_job_to_assign_ to the next job that should be run based on what has been completeted and the overwrite flags.

work out what next job is

References protocols::jd2::JobDistributor::current_batch_id(), protocols::jd2::JobDistributor::current_job_id(), protocols::jd2::JobDistributor::get_jobs(), protocols::jd2::JobDistributor::job_outputter(), mark_job_as_completed(), protocols::jd2::JobsContainer::size(), and protocols::jd2::tr().

Referenced by get_new_job_id().

void protocols::jd2::MPIFileBufJobDistributor::master_go ( protocols::moves::MoverOP  mover)
protected
void protocols::jd2::MPIFileBufJobDistributor::master_job_succeeded ( core::pose::Pose pose,
std::string const &  tag 
)
protected

This should never be called as this is handled internally by the slave nodes, it utility_exits.

References master_rank_, rank_, and protocols::jd2::tr().

Referenced by job_succeeded().

void protocols::jd2::MPIFileBufJobDistributor::master_mark_current_job_id_for_repetition ( )
protected

This should never be called as this is handled internally by the slave nodes, it utility_exits.

References master_rank_, rank_, and protocols::jd2::tr().

Referenced by mark_current_job_id_for_repetition().

core::Size protocols::jd2::MPIFileBufJobDistributor::master_rank ( ) const
inlineprotected
void protocols::jd2::MPIFileBufJobDistributor::master_remove_bad_inputs_from_job_list ( )
protected

Simply increments next_job_to_assign_ to the next job that should be run based on what has been completed and if the input job tag of the job marked as having bad input.

References bad_job_id_, protocols::jd2::JobDistributor::get_jobs(), protocols::jd2::JobDistributor::job_outputter(), protocols::jd2::JobDistributor::mark_job_as_bad(), master_rank_, protocols::jd2::JobDistributor::obtain_new_job(), rank_, and protocols::jd2::tr().

Referenced by remove_bad_inputs_from_job_list().

core::Size protocols::jd2::MPIFileBufJobDistributor::min_client_rank ( ) const
inline

return rank of first worker process (there might be more dedicated processes, e.g., ArchiveManager...)

References min_client_rank_.

Referenced by protocols::jd2::archive::MPIArchiveJobDistributor::go().

core::Size protocols::jd2::MPIFileBufJobDistributor::n_rank ( )
inlineprotected

how many processes — this includes dedicated processes

References n_rank_.

core::Size protocols::jd2::MPIFileBufJobDistributor::n_worker ( )
inlineprotected

how many workers — important to keep track during spin-down process

References n_worker_.

Referenced by master_go().

bool protocols::jd2::MPIFileBufJobDistributor::next_batch ( )
overrideprotectedvirtual

switch current_batch_id_ to next batch

Reimplemented from protocols::jd2::JobDistributor.

References cumulated_jobs_, cumulated_runtime_, master_rank_, protocols::jd2::JobDistributor::next_batch(), and rank_.

core::Size protocols::jd2::MPIFileBufJobDistributor::number_of_processors ( )
inlineprotected

how many processes — this includes dedicated processes

References n_rank_.

Referenced by protocols::jd2::archive::MPIArchiveJobDistributor::notify_archive().

bool protocols::jd2::MPIFileBufJobDistributor::process_message ( core::Size  msg_tag,
core::Size  slave_rank,
core::Size  slave_job_id,
core::Size  slave_batch_id,
core::Real  runtime 
)
protectedvirtual
core::Size protocols::jd2::MPIFileBufJobDistributor::rank ( ) const
inlineprotected
void protocols::jd2::MPIFileBufJobDistributor::remove_bad_inputs_from_job_list ( )
overridevirtual
void protocols::jd2::MPIFileBufJobDistributor::send_job_to_slave ( core::Size  slave_rank)
protected

called by master to send and by slave to receive job

This is the heart of the MPIFileBufJobDistributor. It consistits of two while loops: the job distribution loop (JDL) and the node spin down loop (NSDL). The JDL has three functions. The first is to recieve and process messages from the slave nodes requesting new job ids. The second is to recieve and process messages from the slave nodes indicating a bad input. The third is to recive and process job_success messages from the slave nodes and block while the slave node is writing its output. This is prevent Sizeerleaving of output in score files and silent files. The function of the NSDL is to keep the head node alive while there are still slave nodes processing. Without the NSDL if a slave node finished its allocated job after the head node had finished handing out all of the jobs and exiting (a very likely scenario), it would wait indefinitely for a response from the head node when requesting a new job id.

References protocols::jd2::JobDistributor::current_batch_id(), protocols::jd2::JobDistributor::current_job_id(), master_rank_, protocols::jd2::MPI_JOB_DIST_TAG(), rank_, slave_current_batch_id_, slave_current_job_id_, and protocols::jd2::tr().

Referenced by process_message(), and slave_get_new_job_id().

void protocols::jd2::MPIFileBufJobDistributor::set_n_worker ( core::Size  setting)
inlineprotected

how many workers — important to keep track during spin-down process

References n_worker_.

core::Size protocols::jd2::MPIFileBufJobDistributor::slave_get_new_job_id ( )
protected

requests, receives, and returns a new job id from the master node or returns the current job id if the repeat_job_ flag is set to true

References protocols::jd2::JobDistributor::get_current_batch(), master_rank_, protocols::jd2::NEW_JOB_ID, rank_, repeat_job_, send_job_to_slave(), protocols::jd2::JobDistributor::set_batch_id(), slave_current_batch_id_, slave_current_job_id_, slave_to_master(), and protocols::jd2::tr().

Referenced by get_new_job_id().

void protocols::jd2::MPIFileBufJobDistributor::slave_job_succeeded ( core::pose::Pose pose,
std::string const &  tag 
)
protected

Sends a message to the head node upon successful job completion to avoid output interleaving.

References protocols::jd2::JobDistributor::current_job(), protocols::jd2::JobDistributor::job_outputter(), protocols::jd2::JOB_SUCCESS, master_rank_, rank_, and slave_to_master().

Referenced by job_succeeded().

void protocols::jd2::MPIFileBufJobDistributor::slave_mark_current_job_id_for_repetition ( )
protected
void protocols::jd2::MPIFileBufJobDistributor::slave_remove_bad_inputs_from_job_list ( )
protected

Sends a message to the head node that contains the id of a job that had bad input.

References protocols::jd2::BAD_INPUT, and slave_to_master().

Referenced by remove_bad_inputs_from_job_list().

void protocols::jd2::MPIFileBufJobDistributor::slave_to_master ( core::Size  tag)
protected

Friends And Related Function Documentation

friend class JobDistributorFactory
friend

Member Data Documentation

core::Size protocols::jd2::MPIFileBufJobDistributor::bad_input_jobs_
private

jobs that have returned bad due to status BAD_INPUT

Referenced by master_go(), and process_message().

core::Size protocols::jd2::MPIFileBufJobDistributor::bad_job_id_
private

where master stores next job to assign (in a good state after get_new_job_id up until it's used)

where master temporarily stores id of jobs with bad input

Referenced by mark_job_as_bad(), and master_remove_bad_inputs_from_job_list().

core::Size protocols::jd2::MPIFileBufJobDistributor::cumulated_jobs_
private
core::Real protocols::jd2::MPIFileBufJobDistributor::cumulated_runtime_
private

keep track of average timings for time-outs

Referenced by mark_job_as_completed(), master_go(), and next_batch().

core::Size const protocols::jd2::MPIFileBufJobDistributor::file_buf_rank_
private

the File-Buffer

Referenced by file_buf_rank(), and go().

core::Size protocols::jd2::MPIFileBufJobDistributor::jobs_assigned_
private

keep some statistics about the jobs this is mostly just for silly tr.Info messages...

jobs send to slave-nodes

Referenced by master_go(), and process_message().

core::Size protocols::jd2::MPIFileBufJobDistributor::jobs_returned_
private

jobs that have returned (either, bad or good )

Referenced by master_go(), and process_message().

core::Size const protocols::jd2::MPIFileBufJobDistributor::master_rank_
private
core::Size protocols::jd2::MPIFileBufJobDistributor::min_client_rank_
private
core::Size protocols::jd2::MPIFileBufJobDistributor::n_nodes_left_to_spin_down_
private

how many more to spin down

Referenced by master_go(), and process_message().

core::Size protocols::jd2::MPIFileBufJobDistributor::n_rank_
private

total number of processing elements

Referenced by MPIFileBufJobDistributor(), n_rank(), and number_of_processors().

core::Size protocols::jd2::MPIFileBufJobDistributor::n_worker_
private
core::Size protocols::jd2::MPIFileBufJobDistributor::rank_
private
bool protocols::jd2::MPIFileBufJobDistributor::repeat_job_
private

where slave stores whether it should repeat its current job id

Referenced by slave_get_new_job_id(), and slave_mark_current_job_id_for_repetition().

core::Size protocols::jd2::MPIFileBufJobDistributor::slave_current_batch_id_
private

batch_id allow to run multiple batches of jobs -

Referenced by send_job_to_slave(), slave_get_new_job_id(), and slave_to_master().

core::Size protocols::jd2::MPIFileBufJobDistributor::slave_current_job_id_
private

where slave jobs store current job id

Referenced by send_job_to_slave(), slave_get_new_job_id(), and slave_to_master().

core::Real protocols::jd2::MPIFileBufJobDistributor::slave_current_runtime_
private

runtime of last job

Referenced by job_succeeded(), and slave_to_master().


The documentation for this class was generated from the following files: