Mercurial > hg > Members > e085722 > Cerium
comparison TaskManager/kernel/ppe/TaskManagerImpl.h @ 0:04e28d8d3c6f
first commit
author | Daiki KINJYO <e085722@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 08 Nov 2010 01:23:25 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:04e28d8d3c6f |
---|---|
1 #ifndef INCLUDED_TASK_MANAGER_IMPL | |
2 #define INCLUDED_TASK_MANAGER_IMPL | |
3 | |
4 #include "MailManager.h" | |
5 #include "ListData.h" | |
6 #include "QueueInfo.h" | |
7 #include "TaskQueue.h" | |
8 #include "HTask.h" | |
9 #include "Scheduler.h" | |
10 class MemList; | |
11 | |
12 extern QueueInfo<TaskQueue> *taskQueuePool ; | |
13 extern QueueInfo<HTask> *htaskPool ; | |
14 extern QueueInfo<TaskList> *taskListPool; | |
15 | |
16 | |
17 | |
18 class TaskManagerImpl { | |
19 public: | |
20 | |
21 /* variables */ | |
22 int machineNum; | |
23 QueueInfo<HTask> *activeTaskQueue; | |
24 QueueInfo<HTask> *waitTaskQueue; | |
25 | |
26 QueueInfo<TaskQueue> *taskQueueImpl; | |
27 QueueInfo<HTask> *htaskImpl; | |
28 | |
29 SchedTask *schedTaskManager; | |
30 Scheduler *scheduler; | |
31 TaskManagerImpl *others; | |
32 | |
33 /* constructor */ | |
34 TaskManagerImpl(int num = 1) ; | |
35 | |
36 virtual ~TaskManagerImpl() { } | |
37 | |
38 /* functions */ | |
39 // system | |
40 virtual void init() = 0; | |
41 virtual void run() = 0; | |
42 virtual void start_profile() = 0; | |
43 virtual void show_profile() = 0; | |
44 virtual void append_activeTask(HTaskPtr); | |
45 virtual void append_waitTask(HTaskPtr); | |
46 virtual void polling() = 0; | |
47 | |
48 void check_task_finish(HTaskPtr task, QueueInfo<HTask> *wait_queue); | |
49 void check_task_list_finish(SchedTask *s, TaskListPtr list, QueueInfo<HTask> *wait_queue); | |
50 | |
51 void systask_init(); | |
52 | |
53 // user | |
54 virtual HTaskPtr create_task(int cmd,void *from); | |
55 virtual HTaskPtr create_task(int cmd, memaddr rbuf, long r_size, memaddr wbuf, long w_size,void *from); | |
56 virtual HTaskPtr create_task_array(int id, int num_task, int num_param, int num_inData, int num_outData,void *from); | |
57 virtual void set_task_depend(HTaskPtr master, HTaskPtr slave); | |
58 virtual void spawn_task(HTaskPtr); | |
59 virtual void set_task_cpu(HTaskPtr, CPU_TYPE); | |
60 void set_taskList(HTaskPtr htask, QueueInfo<TaskList> * taskList) ; | |
61 | |
62 void free_htask(HTaskPtr htask) { | |
63 #if !defined(__SPU__) | |
64 if (htask->self) { | |
65 htask->flag.no_auto_free = 0; | |
66 return; | |
67 } | |
68 htaskImpl->free_(htask); | |
69 #endif | |
70 } | |
71 | |
72 void* allocate(int size, int alignment) | |
73 { | |
74 void *buff = 0; | |
75 if (size==0) return 0; | |
76 #if defined(__SPU__) || ! defined(HAS_POSIX_MEMALIGN) | |
77 buff = malloc(size); | |
78 #else | |
79 posix_memalign(&buff, alignment, size); | |
80 #endif | |
81 if (buff==0) | |
82 get_scheduler()->printf("Can't allocate memory\n"); | |
83 return buff; | |
84 } | |
85 | |
86 void* allocate(int size) | |
87 { | |
88 void *buff = 0; | |
89 if (size==0) return 0; | |
90 #if defined(__SPU__) || ! defined(HAS_POSIX_MEMALIGN) | |
91 buff = malloc(size); | |
92 #else | |
93 posix_memalign(&buff, DEFAULT_ALIGNMENT, size); | |
94 #endif | |
95 if (buff==0) | |
96 get_scheduler()->printf("Can't allocate memory\n"); | |
97 return buff; | |
98 } | |
99 | |
100 Scheduler* get_scheduler() { return scheduler; } | |
101 void set_scheduler(Scheduler *s) { scheduler = s; } | |
102 } __attribute__ ((aligned (DEFAULT_ALIGNMENT))); | |
103 | |
104 #endif |