IGLib 1.4
The IGLib base library for development of numerical, technical and business applications.

IG::Num::ParallelJobContainerGen< InputType, ResultType > Class Template Reference

General purpose parallel job container that contains methods for running the job in on the same machine thread. Contains many auxiliary methods for testing and for adaptation of parallel jobs concepts to different tasks. Contains input data and results of a parallel job to be executed, oropertied indicating the state of the job, and methods for interaction with job performer and dispatcher. More...

Inheritance diagram for IG::Num::ParallelJobContainerGen< InputType, ResultType >:
Collaboration diagram for IG::Num::ParallelJobContainerGen< InputType, ResultType >:

List of all members.

Public Member Functions

 ParallelJobContainerGen ()
 Creates a new parallel job container.
 ParallelJobContainerGen (SimpleFunctionDelegate< InputType, ResultType > evaluationDelegate)
 Creates a new parallel job container with inptu data assigned.
 ParallelJobContainerGen (SimpleFunctionDelegate< InputType, ResultType > evaluationDelegate, InputType inputData)
 Creates a new parallel job container with inptu data assigned.
 ParallelJobContainerGen (SimpleFunctionDelegate< InputType, ResultType > evaluationDelegate, InputType inputData, object clientData)
 Creates a new parallel job container with inptu data assigned.
virtual void RunJob ()
 Performs the job by the data contained in the current job container. Warning: only works when the IsJobDefined flag is true.
ResultType RunJob (InputType input)
 Calculates and results of the job corresponding to the current job container, based on the specified intput data. Calculation is performed by setting input data and calling the RunJob() method.
override string ToString ()
 Returns a string representation of the current job dispatcher, which contains relevent data about the server state.

Static Public Member Functions

static
ParallelJobDispatcherGen
< InputType, ResultType > 
CreateDispatcher (int numServers)
 Creates and returns a parallel job dispatcher for job containers of the current typa, with the specified number of servers initialized and added on the dispatcher.
static
ParallelJobDispatcherGen
< InputType, ResultType > 
CreateDispatcher (int numServers, int sleepTimeMs)
 Creates and returns a parallel job dispatcher for job containers of the current typa, with the specified number of servers initialized and added on the dispatcher, and with specified sleeping time (used for the dispetcher and added servers).
static ParallelJobServerGen
< InputType, ResultType > 
CreateServer ()
 Creates and returns a new job server for the current job container type.
static ParallelJobServerGen
< InputType, ResultType > 
CreateServer (int sleeptimeMs)
 Creates and returns a new job server for the current job container type.
static ParallelJobContainerGen
< InputType, ResultType > 
CreateJobContainer ()
 Creates and returns a new job container of the current type.
static ResultType[] TestPerformance (InputType[] inputs, SimpleFunctionDelegate< InputType, ResultType > evaluationFunction, int numServers, int maxEnqueued, double delayTimeSeconds, double delayTimeRelativeError, int sleepTimeMs, int clientOutputLevel)
 Test of parallel job execution.

Protected Member Functions

override void RunOnStarted ()
 Called when 'started' notification is triggered (within the method NotifyJobStarted).
override void RunOnFinished ()
 Called when 'finished' notification is triggered (within the method NotifyJobFinished).
override void RunOnAborted ()
 Called when 'aborted' notification is triggered (within the method NotifyJobAborted).
virtual internal ResultType CalculateResultsPlain (InputType input)
 Calculates and returns results from the specified input data.

Protected Attributes

InputType _input
ResultType _result
ParallelJobCallbackGen
< InputType, ResultType > 
_onStartedGeneric = null
ParallelJobCallbackGen
< InputType, ResultType > 
_onFinishedGeneric = null
ParallelJobCallbackGen
< InputType, ResultType > 
_onAbortedGeneric = null
SimpleFunctionDelegate
< InputType, ResultType > 
_evaluationDelegate = null
bool _doesNotContainJobDefinition = false

Properties

InputType Input [get, set]
 Input for the current job.
ResultType Result [get, set]
 Result of the current job.
ParallelJobCallbackGen
< InputType, ResultType > 
OnStartedGeneric [get, set]
 Delegate that is executed on started event. When executing, job container is locked.
ParallelJobCallbackGen
< InputType, ResultType > 
OnFinishedGeneric [get, set]
 Delegate that is executed on started event. When executing, job container is locked.
ParallelJobCallbackGen
< InputType, ResultType > 
OnAbortedGeneric [get, set]
 Delegate that is executed on started event. When executing, job container is locked.
SimpleFunctionDelegate
< InputType, ResultType > 
EvaluationDelegate [get, set]
 Evaluation delegate that is by default used for calculation of results from input data of the parallel job.
virtual bool IsJobDefined [get, set]
 Indicates whether the curren job container can itself execute a job by calling either variant of the RunJob method.

Detailed Description

template<InputType, ResultType>
class IG::Num::ParallelJobContainerGen< InputType, ResultType >

General purpose parallel job container that contains methods for running the job in on the same machine thread. Contains many auxiliary methods for testing and for adaptation of parallel jobs concepts to different tasks.

Contains input data and results of a parallel job to be executed, oropertied indicating the state of the job, and methods for interaction with job performer and dispatcher.

This class interacts with parallel job dispatcher that sends a job to the specific server, and with the parallel server that executes the job.

$A Igor Aug08;


Member Function Documentation

template<InputType , ResultType >
IG::Num::ParallelJobContainerGen< InputType, ResultType >::ParallelJobContainerGen ( ) [inline]

Creates a new parallel job container.

template<InputType , ResultType >
IG::Num::ParallelJobContainerGen< InputType, ResultType >::ParallelJobContainerGen ( SimpleFunctionDelegate< InputType, ResultType >  evaluationDelegate) [inline]

Creates a new parallel job container with inptu data assigned.

Parameters:
evaluationDelegateDellegate that performs calculation.
template<InputType , ResultType >
IG::Num::ParallelJobContainerGen< InputType, ResultType >::ParallelJobContainerGen ( SimpleFunctionDelegate< InputType, ResultType >  evaluationDelegate,
InputType  inputData 
) [inline]

Creates a new parallel job container with inptu data assigned.

Parameters:
EvaluationDelegateDellegate that performs calculation.
inputDataInpt data for the job.
template<InputType , ResultType >
IG::Num::ParallelJobContainerGen< InputType, ResultType >::ParallelJobContainerGen ( SimpleFunctionDelegate< InputType, ResultType >  evaluationDelegate,
InputType  inputData,
object  clientData 
) [inline]

Creates a new parallel job container with inptu data assigned.

Parameters:
EvaluationDelegateDellegate that performs calculation.
inputDataInpt data for the job.
template<InputType , ResultType >
override void IG::Num::ParallelJobContainerGen< InputType, ResultType >::RunOnStarted ( ) [inline, protected, virtual]

Called when 'started' notification is triggered (within the method NotifyJobStarted).

Reimplemented from IG::Num::ParallelJobContainerBase.

template<InputType , ResultType >
override void IG::Num::ParallelJobContainerGen< InputType, ResultType >::RunOnFinished ( ) [inline, protected, virtual]

Called when 'finished' notification is triggered (within the method NotifyJobFinished).

Reimplemented from IG::Num::ParallelJobContainerBase.

template<InputType , ResultType >
override void IG::Num::ParallelJobContainerGen< InputType, ResultType >::RunOnAborted ( ) [inline, protected, virtual]

Called when 'aborted' notification is triggered (within the method NotifyJobAborted).

Reimplemented from IG::Num::ParallelJobContainerBase.

template<InputType , ResultType >
virtual internal ResultType IG::Num::ParallelJobContainerGen< InputType, ResultType >::CalculateResultsPlain ( InputType  input) [inline, protected, virtual]

Calculates and returns results from the specified input data.

Parameters:
inputInput for calculation.
Returns:
Results of calculation.

Warning: This method should only be called if the flag is true. Otherwise, the job container itself does not know how to execute the job, an this must be done by the appropriate parallel job server object (base type ParallelJobServerBase).

When overriding this method, it must be checked that consistency with the IsJobDefined flag is preserved (one may also need to override the flag).

The parallel job can be executed on the current job container by the RunJob method. That method in turn calls this method, and by overriding the method one can modify how job execution is performed.

The basic variant defined in the ParallelJobContainerGen class just calls the EvaluationDelegate delegate to perform the job, or throws exception if the delegate is not assigned. This behavior can be chabged by overriding the method.

template<InputType , ResultType >
virtual void IG::Num::ParallelJobContainerGen< InputType, ResultType >::RunJob ( ) [inline, virtual]

Performs the job by the data contained in the current job container. Warning: only works when the IsJobDefined flag is true.

Warning: This method should only be called if the flag is true. Otherwise, the job container itself does not know how to execute the job, an this must be done by the appropriate parallel job server object (base type ParallelJobServerBase).

When overriding this method, it must be checked that consistency with the IsJobDefined flag is preserved (one may also need to override the flag).

Parallel jobs by data contained job container objects are normally run by the job server objects that know how to execute teh job. Im this type of job containers, it can be defined by the job container how to run the job in a parallel thread, and this can be done by calling this method. This method can also be used by job servers to execute the job.

Calculation is performed by calling the CalculateResultsPlain method. In its original form, that method just calls the EvaluationDelegate delegate and throws exception if the delegate is not defined. The behavior can be changed either by overriding the CalculateResultsPlain method (recommendable) or by overriding this method (not recommended, but still left as choice).

template<InputType , ResultType >
ResultType IG::Num::ParallelJobContainerGen< InputType, ResultType >::RunJob ( InputType  input) [inline]

Calculates and results of the job corresponding to the current job container, based on the specified intput data. Calculation is performed by setting input data and calling the RunJob() method.

Parameters:
inputInput data for the job that is executed when calling this function.
Returns:
Results of execution of the job.

Warning: This method should only be called if the flag is true. Otherwise, the job container itself does not know how to execute the job, an this must be done by the appropriate parallel job server object (base type ParallelJobServerBase).

This function locks the current job container object's lock. It is therefore thread safe, but may not be called in the context where locking the job container could cause delays or deadlocks.

template<InputType , ResultType >
static ParallelJobDispatcherGen<InputType, ResultType> IG::Num::ParallelJobContainerGen< InputType, ResultType >::CreateDispatcher ( int  numServers) [inline, static]

Creates and returns a parallel job dispatcher for job containers of the current typa, with the specified number of servers initialized and added on the dispatcher.

Parameters:
numServersNumber of servers created and added to the created dispatcher.
template<InputType , ResultType >
static ParallelJobDispatcherGen<InputType, ResultType> IG::Num::ParallelJobContainerGen< InputType, ResultType >::CreateDispatcher ( int  numServers,
int  sleepTimeMs 
) [inline, static]

Creates and returns a parallel job dispatcher for job containers of the current typa, with the specified number of servers initialized and added on the dispatcher, and with specified sleeping time (used for the dispetcher and added servers).

Parameters:
numServersNumber of servers created and added to the created dispatcher.
sleepTimeMsSleeping time (in milliseconds) for dospatcher's server thread and for servers' threads.
template<InputType , ResultType >
static ParallelJobServerGen<InputType, ResultType> IG::Num::ParallelJobContainerGen< InputType, ResultType >::CreateServer ( ) [inline, static]

Creates and returns a new job server for the current job container type.

template<InputType , ResultType >
static ParallelJobServerGen<InputType, ResultType> IG::Num::ParallelJobContainerGen< InputType, ResultType >::CreateServer ( int  sleeptimeMs) [inline, static]

Creates and returns a new job server for the current job container type.

Parameters:
sleeptimeMsSleeping time for the server's serving thread, in milliseconds.
template<InputType , ResultType >
static ParallelJobContainerGen<InputType, ResultType> IG::Num::ParallelJobContainerGen< InputType, ResultType >::CreateJobContainer ( ) [inline, static]

Creates and returns a new job container of the current type.

template<InputType , ResultType >
static ResultType [] IG::Num::ParallelJobContainerGen< InputType, ResultType >::TestPerformance ( InputType[]  inputs,
SimpleFunctionDelegate< InputType, ResultType >  evaluationFunction,
int  numServers,
int  maxEnqueued,
double  delayTimeSeconds,
double  delayTimeRelativeError,
int  sleepTimeMs,
int  clientOutputLevel 
) [inline, static]

Test of parallel job execution.

Parameters:
inputsArray of job inputs.
evaluationFunctionDelegate that is used to evaluate functions.
numServersNumber of servers to be used.
maxEnqueuedMaximal allowed number of jobs enquied.
delayTimeSecondsDelay tie iin seconds.
delayTimeRelativeError
sleepTimeMsSleep time of server threads, in milliseconds.
clientOutputLevelLevel of output on dispatching activity within the method.
Returns:
Array of calculated results.
template<InputType , ResultType >
override string IG::Num::ParallelJobContainerGen< InputType, ResultType >::ToString ( ) [inline]

Returns a string representation of the current job dispatcher, which contains relevent data about the server state.

Reimplemented from IG::Num::ParallelJobContainerBase.

Reimplemented in IG::Lib::CommandLineJobContainer.


Member Data Documentation

template<InputType , ResultType >
InputType IG::Num::ParallelJobContainerGen< InputType, ResultType >::_input [protected]
template<InputType , ResultType >
ResultType IG::Num::ParallelJobContainerGen< InputType, ResultType >::_result [protected]
template<InputType , ResultType >
ParallelJobCallbackGen<InputType, ResultType> IG::Num::ParallelJobContainerGen< InputType, ResultType >::_onStartedGeneric = null [protected]
template<InputType , ResultType >
ParallelJobCallbackGen<InputType, ResultType> IG::Num::ParallelJobContainerGen< InputType, ResultType >::_onFinishedGeneric = null [protected]
template<InputType , ResultType >
ParallelJobCallbackGen<InputType, ResultType> IG::Num::ParallelJobContainerGen< InputType, ResultType >::_onAbortedGeneric = null [protected]
template<InputType , ResultType >
SimpleFunctionDelegate<InputType, ResultType> IG::Num::ParallelJobContainerGen< InputType, ResultType >::_evaluationDelegate = null [protected]
template<InputType , ResultType >
bool IG::Num::ParallelJobContainerGen< InputType, ResultType >::_doesNotContainJobDefinition = false [protected]

Property Documentation

template<InputType , ResultType >
InputType IG::Num::ParallelJobContainerGen< InputType, ResultType >::Input [get, set]

Input for the current job.

template<InputType , ResultType >
ResultType IG::Num::ParallelJobContainerGen< InputType, ResultType >::Result [get, set]

Result of the current job.

template<InputType , ResultType >
ParallelJobCallbackGen<InputType, ResultType> IG::Num::ParallelJobContainerGen< InputType, ResultType >::OnStartedGeneric [get, set]

Delegate that is executed on started event. When executing, job container is locked.

template<InputType , ResultType >
ParallelJobCallbackGen<InputType, ResultType> IG::Num::ParallelJobContainerGen< InputType, ResultType >::OnFinishedGeneric [get, set]

Delegate that is executed on started event. When executing, job container is locked.

template<InputType , ResultType >
ParallelJobCallbackGen<InputType, ResultType> IG::Num::ParallelJobContainerGen< InputType, ResultType >::OnAbortedGeneric [get, set]

Delegate that is executed on started event. When executing, job container is locked.

template<InputType , ResultType >
SimpleFunctionDelegate<InputType, ResultType> IG::Num::ParallelJobContainerGen< InputType, ResultType >::EvaluationDelegate [get, set]

Evaluation delegate that is by default used for calculation of results from input data of the parallel job.

This delegate can be specified by the user of the job container object in order to specify means of how job is performed. The delegate is called on input data in order to calculate and provide job results via returned value.

Normally, job is perfomed by the job server object that knows how to perfom the job. However, some job server objects will use this delegate in order toperform the job. The delegate should be accessed through calling the CalculateResultsPlain method.

template<InputType , ResultType >
virtual bool IG::Num::ParallelJobContainerGen< InputType, ResultType >::IsJobDefined [get, set]

Indicates whether the curren job container can itself execute a job by calling either variant of the RunJob method.

This flag must be consistent with the CalculateResultsPlain and RunJob methods. If any of these method is overridden, consistency must be preserved, which may require overriding the property, too.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Enumerations Properties Events