Peano
Loading...
Searching...
No Matches
Task.cpp
Go to the documentation of this file.
1#include "Task.h"
2
3#include <queue>
4#include <set>
5#include <thread>
6
7#include "BooleanSemaphore.h"
8#include "config.h"
9#include "Core.h"
10#include "Lock.h"
11#include "multicore.h"
12#include "tarch/Assertions.h"
14
15#ifdef UseSmartMPI
16#include "smartmpi.h"
17#endif
18
19bool operator<(const tarch::multicore::Task& lhs, const tarch::multicore::Task& rhs) { return lhs.getPriority() < rhs.getPriority(); }
20
21bool tarch::multicore::TaskComparison::operator()(const Task& lhs, const Task& rhs) const { return lhs < rhs; }
22
23bool tarch::multicore::TaskComparison::operator()(Task* lhs, Task* rhs) const { return *lhs < *rhs; }
24
25tarch::multicore::Task::Task(int taskType, int priority):
26 _taskType(taskType),
27 _priority(priority) {
28 assertion2(priority >= 0, taskType, priority);
29}
30
31bool tarch::multicore::Task::canFuse() const { return _taskType != DontFuse; }
32
33int tarch::multicore::Task::getPriority() const { return _priority; }
34
36 assertion3(priority >= 0, _taskType, _priority, priority);
37 _priority = priority;
38}
39
40int tarch::multicore::Task::getTaskType() const { return _taskType; }
41
42void tarch::multicore::Task::fuse(const std::list<Task*>& otherTasks, int /*device*/) {
43 assertion(canFuse());
44 for (auto pp : otherTasks) {
45 tarch::multicore::Task* currentTask = pp;
46 currentTask->run();
47 }
48 run();
49}
50
52 return "<no-description-available>";
53}
54
56 int taskType,
57 int priority,
58 const std::function<void()>& taskFunctor
59 #if PeanoDebug>0
60 , const std::string& taskDescription
61 #endif
62 ):
63 Task(taskType, priority),
64 _taskFunctor(taskFunctor)
65 #if PeanoDebug>0
66 , _taskDescription(taskDescription)
67 #endif
68{}
69
71 _taskFunctor();
72}
73
75 #if PeanoDebug>0
76 return _taskDescription;
77 #else
78 return "";
79 #endif
80}
81
82tarch::multicore::TaskWithoutCopyOfFunctor::TaskWithoutCopyOfFunctor(int taskType, int priority, std::function<void()>& taskFunctor):
83 Task(taskType, priority),
84 _taskFunctor(taskFunctor) {
85}
86
90
92 Task(Task::DontFuse, priority) {}
93
95 return;
96}
97
99 return "empty";
100}
#define assertion2(expr, param0, param1)
#define assertion3(expr, param0, param1, param2)
#define assertion(expr)
bool operator<(const tarch::multicore::Task &lhs, const tarch::multicore::Task &rhs)
Definition Task.cpp:19
virtual std::string toString() const override
Definition Task.cpp:98
virtual void run() override
Run the task.
Definition Task.cpp:94
bool operator()(const Task &lhs, const Task &rhs) const
Definition Task.cpp:21
virtual std::string toString() const override
Definition Task.cpp:74
virtual void run() override
Run the task.
Definition Task.cpp:70
virtual void run() override
Run the task.
Definition Task.cpp:87
Abstract super class for a job.
Definition Task.h:21
virtual std::string toString() const
Definition Task.cpp:51
virtual void run()=0
Run the task.
virtual bool canFuse() const
Definition Task.cpp:31
int getPriority() const
Definition Task.cpp:33
virtual void fuse(const std::list< Task * > &otherTasks, int targetDevice=Host)
Fuse multiple tasks.
Definition Task.cpp:42
Task(int taskType, int priority)
Construct task.
Definition Task.cpp:25
int getTaskType() const
Definition Task.cpp:40
void setPriority(int priority)
Set priority.
Definition Task.cpp:35