Intel(R) Threading Building Blocks Doxygen Documentation
version 4.2.3
|
Go to the documentation of this file.
17 #ifndef __TBB_flow_graph_impl_H
18 #define __TBB_flow_graph_impl_H
20 #include "../tbb_stddef.h"
22 #include "../task_arena.h"
23 #include "../flow_graph_abstractions.h"
25 #if __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES
26 #include "../concurrent_priority_queue.h"
31 #if TBB_DEPRECATED_FLOW_ENQUEUE
32 #define FLOW_SPAWN(a) tbb::task::enqueue((a))
34 #define FLOW_SPAWN(a) tbb::task::spawn((a))
37 #if __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES
38 #define __TBB_FLOW_GRAPH_PRIORITY_EXPR( expr ) expr
39 #define __TBB_FLOW_GRAPH_PRIORITY_ARG0( priority ) , priority
40 #define __TBB_FLOW_GRAPH_PRIORITY_ARG1( arg1, priority ) arg1, priority
42 #define __TBB_FLOW_GRAPH_PRIORITY_EXPR( expr )
43 #define __TBB_FLOW_GRAPH_PRIORITY_ARG0( priority )
44 #define __TBB_FLOW_GRAPH_PRIORITY_ARG1( arg1, priority ) arg1
45 #endif // __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES
47 #if TBB_DEPRECATED_LIMITER_NODE_CONSTRUCTOR
48 #define __TBB_DEPRECATED_LIMITER_EXPR( expr ) expr
49 #define __TBB_DEPRECATED_LIMITER_ARG2( arg1, arg2 ) arg1, arg2
50 #define __TBB_DEPRECATED_LIMITER_ARG4( arg1, arg2, arg3, arg4 ) arg1, arg3, arg4
52 #define __TBB_DEPRECATED_LIMITER_EXPR( expr )
53 #define __TBB_DEPRECATED_LIMITER_ARG2( arg1, arg2 ) arg1
54 #define __TBB_DEPRECATED_LIMITER_ARG4( arg1, arg2, arg3, arg4 ) arg1, arg2
55 #endif // TBB_DEPRECATED_LIMITER_NODE_CONSTRUCTOR
62 #if __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES
68 namespace interface10 {
72 namespace interface11 {
76 #if __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES
90 template <
typename GraphContainerType,
typename GraphNodeType>
112 if (
this != &other) {
174 #if __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES
190 __TBB_ASSERT_EX( result,
"Number of critical tasks for scheduler and tasks"
191 " in graph's priority queue mismatched" );
193 "Incorrect task submitted to graph priority queue" );
195 "Tasks from graph's priority queue must have priority" );
208 namespace interface10 {
214 template<
typename Body >
233 template<
typename Receiver,
typename Body >
291 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
292 void set_name(
const char *
name);
316 template< typename Receiver, typename Body >
317 void run(Receiver &r, Body body) {
319 task* rtask =
new (task::allocate_additional_child_of(*
root_task()))
328 template<
typename Body >
342 #if TBB_USE_EXCEPTIONS
346 #if __TBB_TASK_GROUP_CONTEXT
349 #if TBB_USE_EXCEPTIONS
359 #if __TBB_TASK_GROUP_CONTEXT
367 #if __TBB_TASK_GROUP_CONTEXT
379 template<
typename C,
typename N>
409 #if __TBB_TASK_GROUP_CONTEXT
426 #if __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES
443 namespace interface11 {
447 #if __TBB_PREVIEW_FLOW_GRAPH_NODE_SET
449 class get_graph_helper;
456 template<
typename C,
typename N>
459 #if __TBB_PREVIEW_FLOW_GRAPH_NODE_SET
460 friend class internal::get_graph_helper;
471 #if TBB_PREVIEW_FLOW_GRAPH_TRACE
472 virtual void set_name(
const char *
name) = 0;
475 #if TBB_DEPRECATED_FLOW_NODE_EXTRACTION
476 virtual void extract() = 0;
498 #if __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES
500 task* critical_task = &t;
512 return *critical_task;
547 #endif // __TBB_flow_graph_impl_H
bool operator==(const graph_iterator &other) const
Equality.
void prepare_task_arena(bool reinit=false)
tbb::task_arena * my_task_arena
std::list< tbb::task * > task_list_type
void release_wait() __TBB_override
Deregisters an external entity that may have interacted with the graph.
void set_ref_count(int count)
Set reference count.
run_and_put_task(Receiver &r, Body &body)
graph()
Constructs a graph with isolated task_group_context.
const GraphNodeType & const_reference
bool is_graph_active(tbb::flow::interface10::graph &g)
void spawn_in_graph_arena(tbb::flow::interface10::graph &g, tbb::task &arena_task)
Spawns a task inside graph arena.
const_iterator cbegin() const
start const iterator
const_iterator cend() const
end const iterator
Tag class used to indicate the "attaching" constructor.
task_list_type my_reset_task_list
graph_iterator(const graph_iterator &other)
Copy constructor.
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
void add_task_to_graph_reset_list(tbb::flow::interface10::graph &g, tbb::task *tp)
tbb::task_group_context * my_context
Base class for types that should not be copied or assigned.
A functor that spawns a task.
void run(Receiver &r, Body body)
Spawns a task that runs a body and puts its output to a specific receiver.
Pure virtual template classes that define interfaces for async communication.
void wait_for_all()
Wait until graph is idle and decrement_wait_count calls equals increment_wait_count calls.
void run(Body body)
Spawns a task that runs a function object.
bool is_cancelled()
return status of graph execution
bool try_pop(reference elem)
Gets a reference to and removes highest priority element.
void remove_node(tbb::flow::interface11::graph_node *n)
graph_iterator operator++(int)
Post-increment.
run_task(Body &body, tbb::flow::interface11::node_priority_t node_priority=tbb::flow::interface11::no_priority)
void __TBB_EXPORTED_METHOD reset()
Forcefully reinitializes the context after the task tree it was associated with is completed.
Used to form groups of tasks.
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp begin
void reset(tbb::flow::interface11::reset_flags f=tbb::flow::interface11::rf_reset_protocol)
void increment_wait_count()
graph_iterator()
Default constructor.
tbb::task * root_task()
Returns the root task of the graph.
static tbb::task *const SUCCESSFULLY_ENQUEUED
GraphContainerType * my_graph
void decrement_wait_count()
iterator end()
end iterator
tbb::flow::interface11::graph_iterator< graph, tbb::flow::interface11::graph_node > iterator
tbb::task * graph_root_task
tbb::flow::interface11::graph_node * my_nodes_last
std::forward_iterator_tag iterator_category
virtual void reset_node(reset_flags f=rf_reset_protocol)=0
void initialize()
Forces allocation of the resources for the task_arena as specified in constructor arguments.
internal::return_type_or_void< F >::type execute(F &f)
Base class for types that should not be assigned.
iterator begin()
start iterator
void wait_for_all()
Wait for reference count to become one, and set reference count to zero.
tbb::spin_mutex nodelist_mutex
graph_iterator & operator=(const graph_iterator &other)
Assignment.
static const node_priority_t no_priority
priority_task_selector(graph_task_priority_queue_t &priority_queue)
Base class for user-defined tasks.
tbb::task * execute() __TBB_override
Should be overridden by derived classes.
tbb::task & prioritize_task(tbb::flow::interface10::graph &g, tbb::task &arena_task)
~graph()
Destroys the graph.
tbb::task * execute() __TBB_override
Should be overridden by derived classes.
pointer operator->() const
Dereference.
void register_node(tbb::flow::interface11::graph_node *n)
unsigned int node_priority_t
void push(const_reference elem)
Pushes elem onto the queue, increasing capacity of queue if necessary.
Concurrent priority queue.
wait_functor(tbb::task *t)
static void enqueue(task &t)
Enqueue task for starvation-resistant execution.
graph_task_priority_queue_t & my_priority_queue
graph_iterator & operator++()
Pre-increment.
graph_iterator(GraphContainerType *g, bool begin)
Private initializing constructor for begin() and end() iterators.
internal::allocate_continuation_proxy & allocate_continuation()
Returns proxy for overloaded new that allocates a continuation task of *this.
Base class for tasks generated by graph nodes.
tbb::flow::interface11::graph_iterator< const graph, const tbb::flow::interface11::graph_node > const_iterator
spawn_functor(tbb::task &t)
tbb::concurrent_priority_queue< graph_task *, graph_task_comparator > graph_task_priority_queue_t
bool __TBB_EXPORTED_METHOD is_group_execution_cancelled() const
Returns true if the context received cancellation request.
#define __TBB_PREVIEW_FLOW_GRAPH_PRIORITIES
GraphNodeType & reference
uintptr_t traits() const
Returns the context's trait.
virtual task * execute()=0
Should be overridden by derived classes.
bool operator!=(const graph_iterator &other) const
Inequality.
void reserve_wait() __TBB_override
Used to register that an external entity may still interact with the graph.
void deactivate_graph(tbb::flow::interface10::graph &g)
void const char const char int ITT_FORMAT __itt_group_sync x void const char * name
A lock that occupies a single byte.
void activate_graph(tbb::flow::interface10::graph &g)
void enqueue_in_graph_arena(tbb::flow::interface10::graph &g, tbb::task &arena_task)
Enqueues a task inside graph arena.
The base of all graph nodes.
tbb::flow::interface11::graph_node * my_nodes
tbb::flow::interface11::internal::graph_task_priority_queue_t my_priority_queue
void make_critical(task &t)
bool operator()(const graph_task *left, const graph_task *right)
task * execute() __TBB_override
Should be overridden by derived classes.
reference operator*() const
Dereference.
#define __TBB_ASSERT_EX(predicate, comment)
"Extended" version is useful to suppress warnings if a variable is only used with an assert
graph_task(node_priority_t node_priority=no_priority)
Copyright © 2005-2020 Intel Corporation. All Rights Reserved.
Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are
registered trademarks or trademarks of Intel Corporation or its
subsidiaries in the United States and other countries.
* Other names and brands may be claimed as the property of others.