MADNESS 0.10.1
|
All world tasks must be derived from this public interface. More...
#include <taskfn.h>
Classes | |
struct | Submit |
Public Member Functions | |
TaskInterface (const TaskAttributes &attr) | |
Create a new task with zero dependencies and given attributes. | |
TaskInterface (int ndepend, const char *caller, const TaskAttributes attr=TaskAttributes()) | |
TaskInterface (int ndepend=0, const TaskAttributes attr=TaskAttributes()) | |
Create a new task with ndepend dependencies (default 0) and given attributes. | |
virtual | ~TaskInterface () |
World * | get_world () const |
virtual void | run (World &) |
Runs a single-threaded task ... derived classes must implement this. | |
virtual void | run (World &world, const TaskThreadEnv &env) |
Runs a multi-threaded task. | |
Public Member Functions inherited from madness::PoolTaskInterface | |
PoolTaskInterface () | |
Default constructor. | |
PoolTaskInterface (const TaskAttributes &attr) | |
virtual | ~PoolTaskInterface ()=default |
Destructor. | |
void | execute () |
void | set_nthread (int nthread) |
Call this to reset the number of threads before the task is submitted. | |
Public Member Functions inherited from madness::TaskAttributes | |
TaskAttributes (const TaskAttributes &attr) | |
Copy constructor. | |
TaskAttributes (unsigned long flags=0) | |
Sets the attributes to the desired values. | |
virtual | ~TaskAttributes () |
int | get_nthread () const |
Get the number of threads. | |
bool | is_generator () const |
Test if the generator attribute is true. | |
bool | is_high_priority () const |
Test if the high priority attribute is true. | |
bool | is_stealable () const |
Test if the stealable attribute is true. | |
template<typename Archive > | |
void | serialize (Archive &ar) |
Serializes the attributes for I/O. | |
TaskAttributes & | set_generator (bool generator_hint) |
Sets the generator attribute. | |
TaskAttributes & | set_highpriority (bool hipri) |
Sets the high priority attribute. | |
void | set_nthread (int nthread) |
Set the number of threads. | |
TaskAttributes & | set_stealable (bool stealable) |
Sets the stealable attribute. | |
Public Member Functions inherited from madness::DependencyInterface | |
DependencyInterface (int ndep, const char *caller) | |
DependencyInterface (int ndep=0) | |
virtual | ~DependencyInterface () |
Destructor. | |
void | dec () |
Decrement the number of dependencies and invoke the callback if ndepend==0 . | |
void | dec_debug (const char *caller) |
void | inc () |
Increment the number of dependencies. | |
void | inc_debug (const char *caller) |
Same as inc(), but keeps track of caller ; calling dec_debug() will signal error if no matching inc_debug() had been invoked | |
int | ndep () const |
Returns the number of unsatisfied dependencies. | |
void | notify () |
Invoked by callbacks to notify of dependencies being satisfied. | |
void | notify_debug (const char *caller) |
Overload of CallbackInterface::notify_debug(), updates dec() | |
bool | probe () const |
Returns true if ndepend == 0 (no unsatisfied dependencies). | |
void | register_callback (CallbackInterface *callback) |
Registers a callback that will be executed when ndepend==0 ; immediately invoked if ndepend==0 . | |
void | register_final_callback (CallbackInterface *callback) |
Registers the final callback to be executed when ndepend==0 ; immediately invoked if ndepend==0 . | |
Public Member Functions inherited from madness::CallbackInterface | |
virtual | ~CallbackInterface () |
Static Public Attributes | |
static bool | debug = false |
Static Public Attributes inherited from madness::TaskAttributes | |
static const unsigned long | GENERATOR = 1ul<<8 |
Mask for generator bit. | |
static const unsigned long | HIGHPRIORITY = GENERATOR<<2 |
Mask for priority bit. | |
static const unsigned long | NTHREAD = 0xff |
Mask for nthread byte. | |
static const unsigned long | STEALABLE = GENERATOR<<1 |
Mask for stealable bit. | |
Protected Member Functions | |
virtual void | run (const TaskThreadEnv &env) |
Override this method to implement a multi-threaded task. | |
Protected Member Functions inherited from madness::CallbackInterface | |
virtual void | notify_debug_impl (const char *caller) |
Private Member Functions | |
void | register_submit_callback () |
Adds call back to schedule task when outstanding dependencies are satisfied. | |
void | set_info (World *w, CallbackInterface *c) |
Set task info. | |
Private Attributes | |
CallbackInterface * | completion |
madness::TaskInterface::Submit | submit |
volatile World * | world |
Friends | |
class | WorldTaskQueue |
Additional Inherited Members | |
Static Public Member Functions inherited from madness::TaskAttributes | |
static TaskAttributes | generator () |
static TaskAttributes | hipri () |
static TaskAttributes | multi_threaded (int nthread) |
Static Protected Member Functions inherited from madness::PoolTaskInterface | |
template<typename fnobjT > | |
static std::enable_if<!(detail::function_traits< fnobjT >::value||detail::memfunc_traits< fnobjT >::value)>::type | make_id (std::pair< void *, unsigned short > &id, const fnobjT &) |
template<typename fnT > | |
static std::enable_if< detail::function_traits< fnT >::value||detail::memfunc_traits< fnT >::value >::type | make_id (std::pair< void *, unsigned short > &id, fnT fn) |
All world tasks must be derived from this public interface.
Multiple worlds with independent queues feed tasks into shared task pool that is mapped to the H/W.
For simplicity and backward compatibility we maintain two run interfaces but new code should adopt the multithreaded interface
run(World&)
- the user implements this for a single-threaded task
run
(World&, const
TaskThreadEnv&
) - the user implements this for a multi-threaded task.
|
inline |
Create a new task with ndepend dependencies (default 0) and given attributes.
|
inline |
Create a new task with ndepend dependencies (default 0) and given attributes, keep track of caller
for debugging purposes.
|
inlineexplicit |
Create a new task with zero dependencies and given attributes.
|
inlinevirtual |
References completion, and madness::CallbackInterface::notify().
|
inlineprivate |
Adds call back to schedule task when outstanding dependencies are satisfied.
References madness::DependencyInterface::register_final_callback(), and submit.
Referenced by madness::WorldTaskQueue::add().
|
protectedvirtual |
Override this method to implement a multi-threaded task.
info.nthread()
will be the number of threads collaborating on this task.
info.id()
will be the index of the current thread id=0
,...,nthread-1.
info.barrier()
will be a barrier for all of the threads, and returns true for the last thread to enter the barrier (other threads get false).
[in] | info | Description needed. |
Implements madness::PoolTaskInterface.
References completion, debug, MADNESS_ASSERT, madness::World::rank(), run(), w(), and world.
|
inlinevirtual |
Runs a single-threaded task ... derived classes must implement this.
This interface may disappear so new code should use the multi-threaded interface.
Reimplemented in Task, madness::MatrixInnerTask< T, R, NDIM >, and TestTask.
References MADNESS_EXCEPTION.
|
inlinevirtual |
Runs a multi-threaded task.
Reimplemented in madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >, madness::detail::ForEachRootTask< rangeT, opT >, madness::SystolicMatrixAlgorithm< T >, madness::SystolicMatrixAlgorithm< double >, TestBarrier, and TimeBarrier.
References MADNESS_EXCEPTION, madness::TaskThreadEnv::nthread(), run(), and world.
|
inlineprivate |
Set task info.
w | The world object that contains the task |
c | Call this callback on completion |
References c, completion, w(), and world.
Referenced by madness::WorldTaskQueue::add().
|
friend |
|
private |
Referenced by ~TaskInterface(), run(), and set_info().
|
static |
Referenced by run().
|
private |
Referenced by register_submit_callback().
|
private |
Referenced by madness::SystolicMatrixAlgorithm< T >::cycle(), get_world(), run(), Task::run(), run(), and set_info().