MADNESS  version 0.9
Classes | Public Member Functions | Static Public Member Functions | Static Protected Member Functions | Friends | List of all members
madness::PoolTaskInterface Class Referenceabstract

Lowest level task interface. More...

#include <worldthread.h>

Inheritance diagram for madness::PoolTaskInterface:
Inheritance graph
[legend]
Collaboration diagram for madness::PoolTaskInterface:
Collaboration graph
[legend]

Public Member Functions

 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 void run (const TaskThreadEnv &info)=0
 Override this method to implement a multi-threaded task. 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)
 

Static Public Member Functions

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

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 &)
 

Friends

class ThreadPool
 

Additional Inherited Members

- 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
 

Detailed Description

Lowest level task interface.

The pool invokes run_multi_threaded() that does any necessary setup for multiple threads and then invokes the users run method.

Constructor & Destructor Documentation

madness::PoolTaskInterface::PoolTaskInterface ( )
inline
madness::PoolTaskInterface::PoolTaskInterface ( const TaskAttributes attr)
inlineexplicit
virtual madness::PoolTaskInterface::~PoolTaskInterface ( )
inlinevirtual

Member Function Documentation

template<typename fnT >
static enable_if_c<detail::function_traits<fnT>::value || detail::memfunc_traits<fnT>::value>::type madness::PoolTaskInterface::make_id ( std::pair< void *, unsigned short > &  id,
fnT  fn 
)
inlinestaticprotected
template<typename fnobjT >
static disable_if_c<detail::function_traits<fnobjT>::value || detail::memfunc_traits<fnobjT>::value>::type madness::PoolTaskInterface::make_id ( std::pair< void *, unsigned short > &  id,
const fnobjT &   
)
inlinestaticprotected
static void madness::PoolTaskInterface::operator delete ( void *  p,
std::size_t  size 
)
throw (
)
inlinestatic

Destroy task object.

virtual void madness::PoolTaskInterface::run ( const TaskThreadEnv info)
pure virtual

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)

Implemented in madness::detail::ForEachRootTask< rangeT, opT >, madness::detail::ForEachTask< rangeT, opT >, madness::PoolTaskNull, madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >, and madness::TaskInterface.

void madness::PoolTaskInterface::set_nthread ( int  nthread)
inline

Call this to reset the number of threads before the task is submitted.

Once a task has been constructed /c TaskAttributes::set_nthread() is insufficient because a multithreaded task includes a barrier that needs to know the number of threads.

References madness::TaskAttributes::get_nthread(), and madness::TaskAttributes::set_nthread().

Referenced by madness::SystolicMatrixAlgorithm< double >::SystolicMatrixAlgorithm().

Friends And Related Function Documentation

friend class ThreadPool
friend

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