MADNESS
version 0.9
|
All world tasks must be derived from this public interface. More...
#include <taskfn.h>
Public Member Functions | |
TaskInterface (int ndepend=0, const TaskAttributes attr=TaskAttributes()) | |
Create a new task with ndepend dependencies (default 0) and given attributes. More... | |
TaskInterface (const TaskAttributes &attr) | |
Create a new task with zero dependencies and given attributes. More... | |
virtual void | run (World &) |
Runs a single-threaded task ... derived classes must implement this. More... | |
virtual void | run (World &world, const TaskThreadEnv &env) |
Runs a multi-threaded task. More... | |
World * | get_world () const |
virtual | ~TaskInterface () |
Public Member Functions inherited from madness::PoolTaskInterface | |
PoolTaskInterface () | |
PoolTaskInterface (const TaskAttributes &attr) | |
void | set_nthread (int nthread) |
Call this to reset the number of threads before the task is submitted. More... | |
virtual | ~PoolTaskInterface () |
Public Member Functions inherited from madness::TaskAttributes | |
TaskAttributes (unsigned long flags=0) | |
TaskAttributes (const TaskAttributes &attr) | |
virtual | ~TaskAttributes () |
bool | is_generator () const |
bool | is_stealable () const |
bool | is_high_priority () const |
void | set_generator (bool generator_hint) |
void | set_stealable (bool stealable) |
void | set_highpriority (bool hipri) |
void | set_nthread (int nthread) |
Are you sure this is what you want to call? More... | |
int | get_nthread () const |
template<typename Archive > | |
void | serialize (Archive &ar) |
Public Member Functions inherited from madness::DependencyInterface | |
DependencyInterface (int ndep=0) | |
int | ndep () const |
Returns the number of unsatisfied dependencies. More... | |
bool | probe () const |
Returns true if ndepend == 0. More... | |
void | notify () |
Invoked by callbacks to notifiy of dependencies being satisfied. More... | |
void | register_callback (CallbackInterface *callback) |
Registers a callback for when ndepend==0 , immediately invoked if ndepend==0 . More... | |
void | inc () |
Increment the number of dependencies. More... | |
void | dec () |
Decrement the number of dependencies and invoke callback if ndepend=0. More... | |
virtual | ~DependencyInterface () |
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 | NTHREAD = 0xff |
static const unsigned long | GENERATOR = 1ul<<8 |
static const unsigned long | STEALABLE = GENERATOR<<1 |
static const unsigned long | HIGHPRIORITY = GENERATOR<<2 |
Protected Member Functions | |
virtual void | run (const TaskThreadEnv &env) |
Override this method to implement a multi-threaded task. More... | |
Friends | |
class | WorldTaskQueue |
Additional Inherited Members | |
Static Public Member Functions inherited from madness::PoolTaskInterface | |
static void | operator delete (void *p, std::size_t size) throw () |
Destroy task object. More... | |
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 fnT > | |
static enable_if_c < detail::function_traits< fnT > ::value||detail::memfunc_traits < fnT >::value >::type | make_id (std::pair< void *, unsigned short > &id, fnT fn) |
template<typename fnobjT > | |
static disable_if_c < detail::function_traits < fnobjT >::value||detail::memfunc_traits < fnobjT >::value >::type | make_id (std::pair< void *, unsigned short > &id, const fnobjT &) |
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.
|
inlineexplicit |
Create a new task with zero dependencies and given attributes.
|
inlinevirtual |
References madness::CallbackInterface::notify().
|
inline |
|
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)
Implements madness::PoolTaskInterface.
Reimplemented in madness::detail::ForEachRootTask< rangeT, opT >, madness::detail::ForEachTask< rangeT, opT >, and madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >.
References debug, madness::World::rank(), TAU_START, and TAU_STOP.
Referenced by run().
|
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 madness::MatrixInnerTask< T, R, NDIM >.
References MADNESS_EXCEPTION.
|
inlinevirtual |
Runs a multi-threaded task.
Reimplemented in madness::SystolicMatrixAlgorithm< T >, madness::SystolicMatrixAlgorithm< double >, madness::SystolicMatrixAlgorithm< T >, and madness::SystolicMatrixAlgorithm< double >.
References MADNESS_EXCEPTION, madness::TaskThreadEnv::nthread(), and run().
|
friend |
|
static |
Referenced by run().