MADNESS 0.10.1
|
Wrap a callable object and its arguments into a task function. More...
#include <taskfn.h>
Public Types | |
typedef fnT | functionT |
The task function type. | |
typedef detail::task_result_type< fnT >::futureT | futureT |
typedef detail::task_result_type< fnT >::resultT | resultT |
The result type of the function. | |
Public Member Functions | |
template<typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T , typename a7T , typename a8T , typename a9T > | |
TaskFn (const futureT &result, functionT func, a1T &&a1, a2T &&a2, a3T &&a3, a4T &&a4, a5T &&a5, a6T &&a6, a7T &&a7, a8T &&a8, a9T &&a9, const TaskAttributes &attr) | |
template<typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T , typename a7T , typename a8T > | |
TaskFn (const futureT &result, functionT func, a1T &&a1, a2T &&a2, a3T &&a3, a4T &&a4, a5T &&a5, a6T &&a6, a7T &&a7, a8T &&a8, const TaskAttributes &attr) | |
template<typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T , typename a7T > | |
TaskFn (const futureT &result, functionT func, a1T &&a1, a2T &&a2, a3T &&a3, a4T &&a4, a5T &&a5, a6T &&a6, a7T &&a7, const TaskAttributes &attr) | |
template<typename a1T , typename a2T , typename a3T , typename a4T , typename a5T , typename a6T > | |
TaskFn (const futureT &result, functionT func, a1T &&a1, a2T &&a2, a3T &&a3, a4T &&a4, a5T &&a5, a6T &&a6, const TaskAttributes &attr) | |
template<typename a1T , typename a2T , typename a3T , typename a4T , typename a5T > | |
TaskFn (const futureT &result, functionT func, a1T &&a1, a2T &&a2, a3T &&a3, a4T &&a4, a5T &&a5, const TaskAttributes &attr) | |
template<typename a1T , typename a2T , typename a3T , typename a4T > | |
TaskFn (const futureT &result, functionT func, a1T &&a1, a2T &&a2, a3T &&a3, a4T &&a4, const TaskAttributes &attr) | |
template<typename a1T , typename a2T , typename a3T > | |
TaskFn (const futureT &result, functionT func, a1T &&a1, a2T &&a2, a3T &&a3, const TaskAttributes &attr) | |
template<typename a1T , typename a2T > | |
TaskFn (const futureT &result, functionT func, a1T &&a1, a2T &&a2, const TaskAttributes &attr) | |
template<typename a1T > | |
TaskFn (const futureT &result, functionT func, a1T &&a1, const TaskAttributes &attr) | |
TaskFn (const futureT &result, functionT func, const TaskAttributes &attr) | |
TaskFn (const futureT &result, functionT func, const TaskAttributes &attr, archive::BufferInputArchive &input_arch) | |
virtual | ~TaskFn () |
const futureT & | result () const |
![]() | |
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. | |
![]() | |
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. | |
![]() | |
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. | |
![]() | |
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 . | |
![]() | |
virtual | ~CallbackInterface () |
Static Public Attributes | |
static const unsigned int | arity |
![]() | |
static bool | debug = false |
![]() | |
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 (World &, const TaskThreadEnv &) |
Runs a multi-threaded task. | |
![]() | |
virtual void | run (const TaskThreadEnv &env) |
Override this method to implement a multi-threaded task. | |
![]() | |
virtual void | notify_debug_impl (const char *caller) |
Private Types | |
typedef TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T > | TaskFn_ |
This class type. | |
Private Member Functions | |
TaskFn (const TaskFn_ &) | |
void | check_dependencies () |
Check dependencies and register callbacks where necessary. | |
template<typename T > | |
void | check_dependency (const detail::ArgHolder< T > &) |
None future arguments are always ready => no op. | |
void | check_dependency (const Future< void > &) |
Future<void> is always ready => no op. | |
void | check_dependency (const std::vector< Future< void > > &) |
Future<void> is always ready => no op. | |
template<typename T > | |
void | check_dependency (detail::ArgHolder< std::vector< Future< T > > > &arg) |
None future arguments are always ready => no op. | |
template<typename T > | |
void | check_dependency (Future< T > &fut) |
Register a non-ready future as a dependency. | |
template<typename T > | |
void | check_dependency (Future< T > *fut) |
Register (pointer to) a non-ready future as a dependency. | |
template<typename T > | |
void | check_dependency (std::vector< Future< T > > &vec) |
None future arguments are always ready => no op. | |
virtual void | get_id (std::pair< void *, unsigned short > &id) const |
TaskFn_ | operator= (TaskFn_ &) |
Static Private Member Functions | |
template<typename ptrT , typename memfnT , typename resT > | |
static memfnT | get_func (const detail::MemFuncWrapper< ptrT, memfnT, resT > &wrapper) |
template<typename fT > | |
static fT & | get_func (fT &f) |
Private Attributes | |
detail::task_arg< arg1T >::holderT | arg1_ |
Argument 1 that will be given to the function. | |
detail::task_arg< arg2T >::holderT | arg2_ |
Argument 2 that will be given to the function. | |
detail::task_arg< arg3T >::holderT | arg3_ |
Argument 3 that will be given to the function. | |
detail::task_arg< arg4T >::holderT | arg4_ |
Argument 4 that will be given to the function. | |
detail::task_arg< arg5T >::holderT | arg5_ |
Argument 5 that will be given to the function. | |
detail::task_arg< arg6T >::holderT | arg6_ |
Argument 6 that will be given to the function. | |
detail::task_arg< arg7T >::holderT | arg7_ |
Argument 7 that will be given to the function. | |
detail::task_arg< arg8T >::holderT | arg8_ |
Argument 8 that will be given to the function. | |
detail::task_arg< arg9T >::holderT | arg9_ |
Argument 9 that will be given to the function. | |
const functionT | func_ |
The task function. | |
futureT | result_ |
The task Future result. | |
Additional Inherited Members | |
![]() | |
static TaskAttributes | generator () |
static TaskAttributes | hipri () |
static TaskAttributes | multi_threaded (int nthread) |
![]() | |
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) |
Wrap a callable object and its arguments into a task function.
The callable object may have up to 10 arguments
typedef fnT madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::functionT |
The task function type.
typedef detail::task_result_type<fnT>::futureT madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::futureT |
typedef detail::task_result_type<fnT>::resultT madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::resultT |
The result type of the function.
|
private |
This class type.
|
private |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlinevirtual |
|
inlineprivate |
Check dependencies and register callbacks where necessary.
References madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::arg1_, madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::arg2_, madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::arg3_, madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::arg4_, madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::arg5_, madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::arg6_, madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::arg7_, madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::arg8_, madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::arg9_, and madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::check_dependency().
Referenced by madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn(), madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn(), madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn(), madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn(), madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn(), madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn(), madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn(), madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn(), madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn(), and madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn().
|
inlineprivate |
None future arguments are always ready => no op.
|
inlineprivate |
Future<void> is always ready => no op.
|
inlineprivate |
Future<void> is always ready => no op.
|
inlineprivate |
None future arguments are always ready => no op.
References madness::arg(), and madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::check_dependency().
|
inlineprivate |
Register a non-ready future as a dependency.
T | The type of the future to check |
fut | The future to check |
References madness::DependencyInterface::inc(), and madness::nonlinear_vector_solver().
Referenced by madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::check_dependencies(), madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::check_dependency(), and madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::check_dependency().
|
inlineprivate |
Register (pointer to) a non-ready future as a dependency.
T | The type of the future to check |
fut | The future to check |
References madness::DependencyInterface::inc(), and madness::nonlinear_vector_solver().
|
inlineprivate |
None future arguments are always ready => no op.
References madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::check_dependency(), and madness::vec().
|
inlinestaticprivate |
References madness::detail::get_mem_func_ptr(), and madness::nonlinear_vector_solver().
|
inlinestaticprivate |
References madness::f.
Referenced by madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::get_id().
|
inlineprivatevirtual |
[in,out] | id | Description needed. |
Reimplemented from madness::PoolTaskInterface.
References madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::func_, madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::get_func(), and madness::PoolTaskInterface::make_id().
|
private |
|
inline |
|
inlineprotectedvirtual |
Runs a multi-threaded task.
Reimplemented from madness::TaskInterface.
References madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::arg1_, madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::arg2_, madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::arg3_, madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::arg4_, madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::arg5_, madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::arg6_, madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::arg7_, madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::arg8_, madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::arg9_, madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::func_, madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::result_, and madness::detail::run_function().
|
private |
Argument 1 that will be given to the function.
Referenced by madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::check_dependencies(), and madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::run().
|
private |
Argument 2 that will be given to the function.
Referenced by madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::check_dependencies(), and madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::run().
|
private |
Argument 3 that will be given to the function.
Referenced by madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::check_dependencies(), and madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::run().
|
private |
Argument 4 that will be given to the function.
Referenced by madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::check_dependencies(), and madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::run().
|
private |
Argument 5 that will be given to the function.
Referenced by madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::check_dependencies(), and madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::run().
|
private |
Argument 6 that will be given to the function.
Referenced by madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::check_dependencies(), and madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::run().
|
private |
Argument 7 that will be given to the function.
Referenced by madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::check_dependencies(), and madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::run().
|
private |
Argument 8 that will be given to the function.
Referenced by madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::check_dependencies(), and madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::run().
|
private |
Argument 9 that will be given to the function.
Referenced by madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::check_dependencies(), and madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::run().
|
static |
The number of arguments given for the function
Referenced by madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn(), madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn(), madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn(), madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn(), madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn(), madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn(), madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn(), madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn(), madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn(), and madness::TaskFn< fnT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, arg8T, arg9T >::TaskFn().
|
private |
|
private |