Mitsuba Renderer  0.5.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
mitsuba::RemoteProcess Class Reference

Parallel process facade used to insert work units from a remote scheduler into the local one. More...

#include <mitsuba/core/sched_remote.h>

+ Inheritance diagram for mitsuba::RemoteProcess:

Public Member Functions

 RemoteProcess (int id, ELogLevel logLevel, StreamBackend *backend, WorkProcessor *proc)
 Create a new remote process. More...
 
EStatus generateWork (WorkUnit *unit, int worker)
 Generate a piece of work. More...
 
void processResult (const WorkResult *result, bool cancelled)
 Called whenever a work unit has been completed. More...
 
ref< WorkProcessorcreateWorkProcessor () const
 Create an instance of the algorithm responsible for executing the work units of this parallel process. More...
 
void handleCancellation ()
 Called when the parallel process is canceled by Scheduler::cancel(). More...
 
WorkUnitgetEmptyWorkUnit ()
 Get an empty work unit from the process (or create one) More...
 
void putFullWorkUnit (WorkUnit *wu)
 Make a full work unit available to the process. More...
 
void setDone ()
 Mark the process as finished. More...
 
virtual const ClassgetClass () const
 Retrieve this object's class. More...
 
- Public Member Functions inherited from mitsuba::ParallelProcess
EStatus getReturnStatus () const
 Query the return status of a process after its execution has finished. More...
 
virtual void bindResource (const std::string &name, int id)
 Bind a resource to this parallel process. More...
 
virtual bool isLocal () const
 Is this process strictly local? More...
 
ELogLevel getLogLevel () const
 Return the log level for events associated with this process. More...
 
const ResourceBindingsgetResourceBindings () const
 Return a list of all bound resources. More...
 
virtual std::vector< std::string > getRequiredPlugins ()
 Return a list of plugins required by this parallel process. More...
 
- Public Member Functions inherited from Object
 Object ()
 Construct a new object. More...
 
int getRefCount () const
 Return the current reference count. More...
 
void incRef () const
 Increase the reference count of the object by one. More...
 
void decRef (bool autoDeallocate=true) const
 Decrease the reference count of the object and possibly deallocate it. More...
 
virtual std::string toString () const
 Return a human-readable string representation of the object's contents. More...
 

Static Public Attributes

static Classm_theClass
 
- Static Public Attributes inherited from mitsuba::ParallelProcess
static Classm_theClass
 
- Static Public Attributes inherited from Object
static Classm_theClass
 Pointer to the object's class descriptor. More...
 

Protected Member Functions

virtual ~RemoteProcess ()
 
- Protected Member Functions inherited from mitsuba::ParallelProcess
 ParallelProcess ()
 Protected constructor. More...
 
virtual ~ParallelProcess ()
 Virtual destructor. More...
 
- Protected Member Functions inherited from Object
virtual ~Object ()
 Virtual private deconstructor. (Will only be called by ref) More...
 

Additional Inherited Members

- Public Types inherited from mitsuba::ParallelProcess
enum  EStatus { EUnknown, EPause, ESuccess, EFailure }
 Return codes used by generateWork() and getReturnStatus() More...
 
typedef std::map< std::string,
int > 
ResourceBindings
 Binding from local resource names to global resource IDs. More...
 
- Static Public Member Functions inherited from Object
static void staticInitialization ()
 Initializes the built-in reference count debugger (if enabled) More...
 
static void staticShutdown ()
 Free the memory taken by staticInitialization() More...
 
- Protected Attributes inherited from mitsuba::ParallelProcess
ResourceBindings m_bindings
 
EStatus m_returnStatus
 
ELogLevel m_logLevel
 

Detailed Description

Parallel process facade used to insert work units from a remote scheduler into the local one.

Constructor & Destructor Documentation

mitsuba::RemoteProcess::RemoteProcess ( int  id,
ELogLevel  logLevel,
StreamBackend backend,
WorkProcessor proc 
)

Create a new remote process.

Parameters
idIdentification number for this process
logLevelLog level for events associated with this process
backendThe responsible server-side communication backend
procWork processor instance for use with this process
virtual mitsuba::RemoteProcess::~RemoteProcess ( )
protectedvirtual

Member Function Documentation

ref<WorkProcessor> mitsuba::RemoteProcess::createWorkProcessor ( ) const
virtual

Create an instance of the algorithm responsible for executing the work units of this parallel process.

Implements mitsuba::ParallelProcess.

EStatus mitsuba::RemoteProcess::generateWork ( WorkUnit unit,
int  worker 
)
virtual

Generate a piece of work.

Takes a pre-allocated WorkUnit instance of the appropriate sub-type and size (as specified by ParallelProcess::getWorkUnitName()) and fills it with the appropriate content. Returns ESuccess on success and EFailure or EPause when no more work is left – in that case, the work unit will be ignored and the process completed (EFailure) or temporarily paused (EPause). When EPause was used, resubmission via Scheduler::schedule() will be required once more work is available. In some cases, it is useful to distribute 'nearby' pieces of work to the same processor – the worker parameter can be used to implement this. This function should run as quickly as possible, since it will be executed while the scheduler mutex is held. A thrown exception will lead to the termination of the parallel process.

Parameters
unitWork unit data structure to be filled
workerID of the worker executing this function

Implements mitsuba::ParallelProcess.

virtual const Class* mitsuba::RemoteProcess::getClass ( ) const
virtual

Retrieve this object's class.

Reimplemented from mitsuba::ParallelProcess.

WorkUnit* mitsuba::RemoteProcess::getEmptyWorkUnit ( )
inline

Get an empty work unit from the process (or create one)

void mitsuba::RemoteProcess::handleCancellation ( )
virtual

Called when the parallel process is canceled by Scheduler::cancel().

The default implementation does nothing.

Reimplemented from mitsuba::ParallelProcess.

void mitsuba::RemoteProcess::processResult ( const WorkResult result,
bool  cancelled 
)
virtual

Called whenever a work unit has been completed.

Note that this function may concurrently be executed by multiple threads. Also, processing of work results will generally be out of order with respect to the creation in generateWork().

When a work unit is only partially completed due to a call to Scheduler::cancel(), the second parameter is set to true. A thrown exception will lead to the termination of the parallel process.

Parameters
resultWork result to be processed
cancelledWas the associated work unit not fully completed

Implements mitsuba::ParallelProcess.

void mitsuba::RemoteProcess::putFullWorkUnit ( WorkUnit wu)
inline

Make a full work unit available to the process.

void mitsuba::RemoteProcess::setDone ( )
inline

Mark the process as finished.

Member Data Documentation

Class* mitsuba::RemoteProcess::m_theClass
static

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