Peano
Loading...
Searching...
No Matches
Task.h
Go to the documentation of this file.
1// This file is part of the Peano project. For conditions of distribution and
2// use, please see the copyright notice at www.peano-framework.org
3#pragma once
4
5#include <functional>
6#include <limits>
7#include <list>
8#include <set>
9#include <string>
10#include <tuple>
11#include <vector>
12
13#include "multicore.h"
14
15
16namespace tarch {
17 namespace multicore {
21 class Task {
22 protected:
23 const int _taskType;
25
26 public:
27 static constexpr int DefaultPriority = 1024;
28 static constexpr int Host = -1;
29 static constexpr int DontFuse = -1;
30
90 Task(int taskType, int priority);
91
92 virtual ~Task() {}
93
94 int getTaskType() const;
95 int getPriority() const;
96
102 void setPriority(int priority);
103
107 virtual bool canFuse() const;
108
112 virtual void run() = 0;
113
148 virtual void fuse(const std::vector<Task*>& otherTasks, int targetDevice = Host);
149
150 virtual std::string toString() const;
151 };
152
160 public:
161 bool operator()(const Task& lhs, const Task& rhs) const;
162 bool operator()(Task* lhs, Task* rhs) const;
163 };
164
211 private:
216 std::function<void()> _taskFunctor;
217
218 #if PeanoDebug>0
219 std::string _taskDescription;
220 #endif
221
222 public:
225
282 int taskType,
283 int priority,
284 const std::function<void()>& taskFunctor
285 #if PeanoDebug>0
286 , const std::string& taskDescription = ""
287 #endif
288 );
289
290 virtual void run() override;
291
292 virtual std::string toString() const override;
293 };
294
301 class EmptyTask: public Task {
302 public:
303 EmptyTask() = delete;
304
310 EmptyTask(int priority);
311
312 virtual void run() override;
313
314 virtual std::string toString() const override;
315 };
316
333 private:
338 std::function<void()>& _taskFunctor;
339
340 public:
343
344 TaskWithoutCopyOfFunctor(int taskType, int priority, std::function<void()>& taskFunctor);
345
346 virtual void run() override;
347 };
348 } // namespace multicore
349} // namespace tarch
350
bool operator<(const tarch::multicore::Task &lhs, const tarch::multicore::Task &rhs)
An empty task.
Definition Task.h:301
virtual void run() override
Run the task.
EmptyTask(int priority)
Create empty task.
virtual std::string toString() const override
Helper class if you wanna administer tasks with in a queue.
Definition Task.h:159
bool operator()(Task *lhs, Task *rhs) const
bool operator()(const Task &lhs, const Task &rhs) const
Frequently used implementation for job with a functor.
Definition Task.h:210
std::function< void()> _taskFunctor
See the outer class description for an explanation why this is an attribute, i.e.
Definition Task.h:216
virtual void run() override
Run the task.
virtual std::string toString() const override
TaskWithCopyOfFunctor(const TaskWithCopyOfFunctor &)=delete
TaskWithCopyOfFunctor(int taskType, int priority, const std::function< void()> &taskFunctor)
Create new task from a functor.
Frequently used implementation for job with a functor.
Definition Task.h:332
TaskWithoutCopyOfFunctor(const TaskWithoutCopyOfFunctor &)=delete
std::function< void()> & _taskFunctor
See the outer class description for an explanation why this is an attribute, i.e.
Definition Task.h:338
virtual void run() override
Run the task.
TaskWithoutCopyOfFunctor(int taskType, int priority, std::function< void()> &taskFunctor)
Abstract super class for a job.
Definition Task.h:21
virtual void run()=0
Run the task.
virtual bool canFuse() const
const int _taskType
Definition Task.h:23
static constexpr int Host
Definition Task.h:28
virtual std::string toString() const
Task(int taskType, int priority)
Construct task.
virtual void fuse(const std::vector< Task * > &otherTasks, int targetDevice=Host)
Fuse multiple tasks.
static constexpr int DontFuse
Definition Task.h:29
static constexpr int DefaultPriority
Definition Task.h:27
virtual ~Task()
Definition Task.h:92
void setPriority(int priority)
Set priority.
Have to include this header, as I need access to the SYCL_EXTERNAL keyword.
Definition accelerator.h:19