Mercurial > hg > Members > kono > Cerium
annotate TaskManager/kernel/ppe/TaskManagerImpl.h @ 941:0c11c2fd7e63
add no_auto_free flag on HTask
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 31 Jul 2010 17:50:38 +0900 |
parents | 586b4f825f24 |
children | 9989dd7b9ac2 |
rev | line source |
---|---|
3 | 1 #ifndef INCLUDED_TASK_MANAGER_IMPL |
2 #define INCLUDED_TASK_MANAGER_IMPL | |
3 | |
307 | 4 #include "MailManager.h" |
5 #include "ListData.h" | |
475
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
373
diff
changeset
|
6 #include "TaskListInfo.h" |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
373
diff
changeset
|
7 #include "TaskQueueInfo.h" |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
373
diff
changeset
|
8 #include "HTaskInfo.h" |
736 | 9 #include "Scheduler.h" |
619 | 10 class MemList; |
475
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
373
diff
changeset
|
11 |
54 | 12 |
3 | 13 class TaskManagerImpl { |
14 public: | |
15 | |
16 /* variables */ | |
17 int machineNum; | |
498
cb5ecfc5aaa3
double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
496
diff
changeset
|
18 HTaskInfo *activeTaskQueue; |
cb5ecfc5aaa3
double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
496
diff
changeset
|
19 HTaskInfo *waitTaskQueue; |
475
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
373
diff
changeset
|
20 |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
373
diff
changeset
|
21 TaskQueueInfo *taskQueueImpl; |
e083c4ff91c1
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
373
diff
changeset
|
22 HTaskInfo *htaskImpl; |
619 | 23 |
514 | 24 SchedTask *schedTaskManager; |
637 | 25 Scheduler *scheduler; |
832
29094b48d966
poling (may recurse..)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
830
diff
changeset
|
26 TaskManagerImpl *others; |
3 | 27 |
480
46464727d825
TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
479
diff
changeset
|
28 /* constructor */ |
835 | 29 TaskManagerImpl(int num = 1) ; |
480
46464727d825
TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
479
diff
changeset
|
30 |
46464727d825
TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
479
diff
changeset
|
31 virtual ~TaskManagerImpl() { } |
46464727d825
TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
479
diff
changeset
|
32 |
3 | 33 /* functions */ |
109 | 34 // system |
480
46464727d825
TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
479
diff
changeset
|
35 virtual void init() = 0; |
46464727d825
TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
479
diff
changeset
|
36 virtual void run() = 0; |
672 | 37 virtual void start_profile() = 0; |
38 virtual void show_profile() = 0; | |
498
cb5ecfc5aaa3
double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
496
diff
changeset
|
39 virtual void append_activeTask(HTaskPtr); |
cb5ecfc5aaa3
double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
496
diff
changeset
|
40 virtual void append_waitTask(HTaskPtr); |
832
29094b48d966
poling (may recurse..)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
830
diff
changeset
|
41 virtual void polling() = 0; |
109 | 42 |
647
7c9ded1ea750
MailManager rewrite. not yet worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
637
diff
changeset
|
43 void check_task_finish(HTaskPtr task, HTaskInfo *wait_queue); |
830 | 44 void check_task_list_finish(SchedTask *s, TaskListPtr list, HTaskInfo *wait_queue); |
109 | 45 |
480
46464727d825
TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
479
diff
changeset
|
46 void systask_init(); |
109 | 47 |
48 // user | |
897
ad95be23c794
add return address in SimpleTask for debugging.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
895
diff
changeset
|
49 virtual HTaskPtr create_task(int cmd,void *from); |
ad95be23c794
add return address in SimpleTask for debugging.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
895
diff
changeset
|
50 virtual HTaskPtr create_task(int cmd, memaddr rbuf, long r_size, memaddr wbuf, long w_size,void *from); |
ad95be23c794
add return address in SimpleTask for debugging.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
895
diff
changeset
|
51 virtual HTaskPtr create_task_array(int id, int num_task, int num_param, int num_inData, int num_outData,void *from); |
637 | 52 virtual void set_task_depend(HTaskPtr master, HTaskPtr slave); |
53 virtual void spawn_task(HTaskPtr); | |
54 virtual void set_task_cpu(HTaskPtr, CPU_TYPE); | |
801 | 55 void set_taskList(HTaskPtr htask, TaskListInfoPtr taskList) ; |
619 | 56 |
941
0c11c2fd7e63
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
57 void free_htask(HTaskPtr htask) { |
0c11c2fd7e63
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
58 #if !defined(__SPU__) |
0c11c2fd7e63
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
59 if (htask->self) { |
0c11c2fd7e63
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
60 htask->flag.no_auto_free = 0; |
0c11c2fd7e63
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
61 return; |
0c11c2fd7e63
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
62 } |
0c11c2fd7e63
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
63 htaskImpl->free_(htask); |
0c11c2fd7e63
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
64 #endif |
0c11c2fd7e63
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
65 } |
0c11c2fd7e63
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
66 |
637 | 67 void* allocate(int size, int alignment) |
68 { | |
899 | 69 void *buff = 0; |
637 | 70 if (size==0) return 0; |
666 | 71 #if defined(__SPU__) || ! defined(HAS_POSIX_MEMALIGN) |
72 buff = malloc(size); | |
73 #else | |
637 | 74 posix_memalign(&buff, alignment, size); |
666 | 75 #endif |
736 | 76 if (buff==0) |
77 get_scheduler()->printf("Can't allocate memory\n"); | |
637 | 78 return buff; |
79 } | |
80 | |
81 void* allocate(int size) | |
82 { | |
899 | 83 void *buff = 0; |
637 | 84 if (size==0) return 0; |
666 | 85 #if defined(__SPU__) || ! defined(HAS_POSIX_MEMALIGN) |
86 buff = malloc(size); | |
87 #else | |
637 | 88 posix_memalign(&buff, DEFAULT_ALIGNMENT, size); |
666 | 89 #endif |
736 | 90 if (buff==0) |
91 get_scheduler()->printf("Can't allocate memory\n"); | |
637 | 92 return buff; |
93 } | |
94 | |
95 Scheduler* get_scheduler() { return scheduler; } | |
96 void set_scheduler(Scheduler *s) { scheduler = s; } | |
895
bed529c55eda
add alignment of classes in SPU
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
835
diff
changeset
|
97 } __attribute__ ((aligned (DEFAULT_ALIGNMENT))); |
619 | 98 |
3 | 99 #endif |