Abstract parallelizable task. More...
#include <mitsuba/core/sched.h>
Public Types | |
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... | |
Public Member Functions | |
virtual EStatus | generateWork (WorkUnit *unit, int worker)=0 |
Generate a piece of work. More... | |
virtual void | processResult (const WorkResult *result, bool cancelled)=0 |
Called whenever a work unit has been completed. More... | |
virtual void | handleCancellation () |
Called when the parallel process is canceled by Scheduler::cancel(). More... | |
EStatus | getReturnStatus () const |
Query the return status of a process after its execution has finished. More... | |
virtual ref< WorkProcessor > | createWorkProcessor () const =0 |
Create an instance of the algorithm responsible for executing the work units of this parallel process. 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 ResourceBindings & | getResourceBindings () 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... | |
virtual const Class * | getClass () const |
Retrieve this object's class. 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 Class * | m_theClass |
Static Public Attributes inherited from Object | |
static Class * | m_theClass |
Pointer to the object's class descriptor. More... | |
Protected Member Functions | |
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... | |
Protected Attributes | |
ResourceBindings | m_bindings |
EStatus | m_returnStatus |
ELogLevel | m_logLevel |
Friends | |
class | Scheduler |
Additional Inherited Members | |
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... | |
Abstract parallelizable task.
Instances of this class model a larger piece of work that can be split into independent `units' and subsequently farmed out over a cluster or processed locally. After the work units have been completed, the results are pieced back together to a solution of the original large-scale problem.
This class implements the core logic running on the central scheduling server, i.e. the part that is responsible for generating work units and accepting their results. The module that performs the actual computation is an instance of WorkProcessor, which is also specified here. Finally, the this class references `resources', which denote chunks of globally shared read-only data required during execution.
typedef std::map<std::string, int> mitsuba::ParallelProcess::ResourceBindings |
Binding from local resource names to global resource IDs.
Return codes used by generateWork() and getReturnStatus()
|
inlineprotected |
Protected constructor.
|
inlineprotectedvirtual |
Virtual destructor.
|
virtual |
Bind a resource to this parallel process.
Takes a resource ID as given by the scheduler and associates it with a name. This name can later be used by the work processor to access the resource data.
name | Process-specific name of the resource |
id | Resource ID as returned by Scheduler::registerResource() |
Reimplemented in mitsuba::BlockedRenderProcess.
|
pure virtual |
Create an instance of the algorithm responsible for executing the work units of this parallel process.
Implemented in mitsuba::RemoteProcess, mitsuba::GatherPhotonProcess, and mitsuba::BlockedRenderProcess.
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.
unit | Work unit data structure to be filled |
worker | ID of the worker executing this function |
Implemented in mitsuba::RemoteProcess, mitsuba::GatherPhotonProcess, mitsuba::ParticleProcess, mitsuba::BlockedRenderProcess, and mitsuba::BlockedImageProcess.
|
virtual |
Retrieve this object's class.
Reimplemented from Object.
Reimplemented in mitsuba::RemoteProcess, mitsuba::GatherPhotonProcess, mitsuba::ParticleProcess, mitsuba::BlockedRenderProcess, and mitsuba::BlockedImageProcess.
|
inline |
Return the log level for events associated with this process.
By default, this is set to EDebug
|
virtual |
Return a list of plugins required by this parallel process.
This is required so that remote machines can load the plugins before they accept work from this process. The default implementation just returns all plugins that are loaded in the current application.
|
inline |
Return a list of all bound resources.
|
inline |
Query the return status of a process after its execution has finished.
Returns one of Success, Failure or Unknown. (EUnknown means that the process is either still running or has never been scheduled).
|
virtual |
Called when the parallel process is canceled by Scheduler::cancel().
The default implementation does nothing.
Reimplemented in mitsuba::RemoteProcess.
|
virtual |
Is this process strictly local?
If a process is marked as local, it shouldn't be distributed to remote processing nodes. The default implementation returns false.
Reimplemented in mitsuba::GatherPhotonProcess.
|
pure 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.
result | Work result to be processed |
cancelled | Was the associated work unit not fully completed |
Implemented in mitsuba::RemoteProcess, mitsuba::GatherPhotonProcess, and mitsuba::BlockedRenderProcess.
|
friend |
|
protected |
|
protected |
|
protected |
|
static |