Taskflow  3.2.0-Master-Branch
Loading...
Searching...
No Matches
sycl_task.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "sycl_graph.hpp"
4
10namespace tf {
11
12// ----------------------------------------------------------------------------
13// syclTask
14// ----------------------------------------------------------------------------
15
21class syclTask {
22
23 friend class syclFlow;
24
26
27 public:
28
32 syclTask() = default;
33
37 syclTask(const syclTask&) = default;
38
42 syclTask& operator = (const syclTask&) = default;
43
53 template <typename... Ts>
54 syclTask& precede(Ts&&... tasks);
55
65 template <typename... Ts>
66 syclTask& succeed(Ts&&... tasks);
67
76
80 const std::string& name() const;
81
85 size_t num_successors() const;
86
90 size_t num_dependents() const;
91
95 bool empty() const;
96
103 template <typename T>
104 void dump(T& ostream) const;
105
109 template <typename V>
110 void for_each_successor(V&& visitor) const;
111
115 template <typename V>
116 void for_each_dependent(V&& visitor) const;
117
118 private:
119
120 syclTask(syclNode*);
121
122 syclNode* _node {nullptr};
123};
124
125// Constructor
126inline syclTask::syclTask(syclNode* node) : _node {node} {
127}
128
129// Function: precede
130template <typename... Ts>
132 (_node->_precede(tasks._node), ...);
133 return *this;
134}
135
136// Function: succeed
137template <typename... Ts>
139 (tasks._node->_precede(_node), ...);
140 return *this;
141}
142
143// Function: empty
144inline bool syclTask::empty() const {
145 return _node == nullptr;
146}
147
148// Function: name
149inline syclTask& syclTask::name(const std::string& name) {
150 _node->_name = name;
151 return *this;
152}
153
154// Function: name
155inline const std::string& syclTask::name() const {
156 return _node->_name;
157}
158
159// Function: num_successors
160inline size_t syclTask::num_successors() const {
161 return _node->_successors.size();
162}
163
164// Function: num_dependents
165inline size_t syclTask::num_dependents() const {
166 return _node->_dependents.size();
167}
168
169// Procedure: dump
170template <typename T>
171void syclTask::dump(T& os) const {
172 os << "syclTask ";
173 if(_node->_name.empty()) os << _node;
174 else os << _node->_name;
175}
176
177// Function: for_each_successor
178template <typename V>
179void syclTask::for_each_successor(V&& visitor) const {
180 for(size_t i=0; i<_node->_successors.size(); ++i) {
181 visitor(syclTask(_node->_successors[i]));
182 }
183}
184
185// Function: for_each_dependent
186template <typename V>
187void syclTask::for_each_dependent(V&& visitor) const {
188 for(size_t i=0; i<_node->_dependents.size(); ++i) {
189 visitor(syclTask(_node->_dependents[i]));
190 }
191}
192
193
194// ----------------------------------------------------------------------------
195// global ostream
196// ----------------------------------------------------------------------------
197
202 ct.dump(os);
203 return os;
204}
205
206} // end of namespace tf -----------------------------------------------------
207
208
209
class for building a SYCL task dependency graph
Definition syclflow.hpp:23
handle to a node of the internal CUDA graph
Definition sycl_task.hpp:21
size_t num_successors() const
queries the number of successors
Definition sycl_task.hpp:160
syclTask & succeed(Ts &&... tasks)
adds precedence links from other tasks to this
Definition sycl_task.hpp:138
syclTask(const syclTask &)=default
copy-constructs a syclTask
void dump(T &ostream) const
dumps the task through an output stream
Definition sycl_task.hpp:171
friend std::ostream & operator<<(std::ostream &, const syclTask &)
overload of ostream inserter operator for syclTask
Definition sycl_task.hpp:201
syclTask & precede(Ts &&... tasks)
adds precedence links from this to other tasks
Definition sycl_task.hpp:131
void for_each_successor(V &&visitor) const
applies an visitor callable to each successor of the task
Definition sycl_task.hpp:179
bool empty() const
queries if the task is associated with a syclNode
Definition sycl_task.hpp:144
size_t num_dependents() const
queries the number of dependents
Definition sycl_task.hpp:165
const std::string & name() const
queries the name of the task
Definition sycl_task.hpp:155
syclTask & operator=(const syclTask &)=default
copy-assigns a syclTask
syclTask()=default
constructs an empty syclTask
void for_each_dependent(V &&visitor) const
applies an visitor callable to each dependents of the task
Definition sycl_task.hpp:187
taskflow namespace
Definition small_vector.hpp:27
std::ostream & operator<<(std::ostream &os, const Task &task)
overload of ostream inserter operator for cudaTask
Definition task.hpp:626