Mercurial > hg > Game > Cerium
annotate TaskManager/kernel/ppe/TaskManagerImpl.h @ 970:1a4849b2acad draft
change pipeline and TaskArray fast
author | Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 26 Aug 2010 20:38:06 +0900 |
parents | 6ffeb543e8d4 |
children | 8cd123d2f3ca |
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" | |
955 | 6 #include "QueueInfo.h" |
7 #include "TaskQueue.h" | |
8 #include "HTask.h" | |
736 | 9 #include "Scheduler.h" |
619 | 10 class MemList; |
475
4e0308d2ba73
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
373
diff
changeset
|
11 |
955 | 12 extern QueueInfo<TaskQueue> *taskQueuePool ; |
13 extern QueueInfo<HTask> *htaskPool ; | |
14 extern QueueInfo<TaskList> *taskListPool; | |
15 | |
16 | |
54 | 17 |
3 | 18 class TaskManagerImpl { |
19 public: | |
20 | |
21 /* variables */ | |
22 int machineNum; | |
955 | 23 QueueInfo<HTask> *activeTaskQueue; |
24 QueueInfo<HTask> *waitTaskQueue; | |
475
4e0308d2ba73
BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
373
diff
changeset
|
25 |
955 | 26 QueueInfo<TaskQueue> *taskQueueImpl; |
27 QueueInfo<HTask> *htaskImpl; | |
619 | 28 |
546 | 29 SchedTask *schedTaskManager; |
637 | 30 Scheduler *scheduler; |
833
577bde5d0cec
poling (may recurse..)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
830
diff
changeset
|
31 TaskManagerImpl *others; |
3 | 32 |
480
75e4afa40da2
TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
479
diff
changeset
|
33 /* constructor */ |
835 | 34 TaskManagerImpl(int num = 1) ; |
480
75e4afa40da2
TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
479
diff
changeset
|
35 |
75e4afa40da2
TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
479
diff
changeset
|
36 virtual ~TaskManagerImpl() { } |
75e4afa40da2
TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
479
diff
changeset
|
37 |
3 | 38 /* functions */ |
109 | 39 // system |
480
75e4afa40da2
TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
479
diff
changeset
|
40 virtual void init() = 0; |
75e4afa40da2
TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
479
diff
changeset
|
41 virtual void run() = 0; |
672 | 42 virtual void start_profile() = 0; |
43 virtual void show_profile() = 0; | |
498
bce667ff20b9
double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
496
diff
changeset
|
44 virtual void append_activeTask(HTaskPtr); |
bce667ff20b9
double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
496
diff
changeset
|
45 virtual void append_waitTask(HTaskPtr); |
833
577bde5d0cec
poling (may recurse..)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
830
diff
changeset
|
46 virtual void polling() = 0; |
109 | 47 |
955 | 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); | |
109 | 50 |
480
75e4afa40da2
TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
479
diff
changeset
|
51 void systask_init(); |
109 | 52 |
53 // user | |
897
6bd218d3f643
add return address in SimpleTask for debugging.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
895
diff
changeset
|
54 virtual HTaskPtr create_task(int cmd,void *from); |
6bd218d3f643
add return address in SimpleTask for debugging.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
895
diff
changeset
|
55 virtual HTaskPtr create_task(int cmd, memaddr rbuf, long r_size, memaddr wbuf, long w_size,void *from); |
6bd218d3f643
add return address in SimpleTask for debugging.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
895
diff
changeset
|
56 virtual HTaskPtr create_task_array(int id, int num_task, int num_param, int num_inData, int num_outData,void *from); |
637 | 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); | |
955 | 60 void set_taskList(HTaskPtr htask, QueueInfo<TaskList> * taskList) ; |
619 | 61 |
941
fc6cfaae6de7
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
62 void free_htask(HTaskPtr htask) { |
fc6cfaae6de7
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
63 #if !defined(__SPU__) |
fc6cfaae6de7
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
64 if (htask->self) { |
fc6cfaae6de7
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
65 htask->flag.no_auto_free = 0; |
fc6cfaae6de7
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
66 return; |
fc6cfaae6de7
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
67 } |
fc6cfaae6de7
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
68 htaskImpl->free_(htask); |
fc6cfaae6de7
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
69 #endif |
fc6cfaae6de7
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
70 } |
fc6cfaae6de7
add no_auto_free flag on HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
899
diff
changeset
|
71 |
637 | 72 void* allocate(int size, int alignment) |
73 { | |
899 | 74 void *buff = 0; |
637 | 75 if (size==0) return 0; |
666 | 76 #if defined(__SPU__) || ! defined(HAS_POSIX_MEMALIGN) |
77 buff = malloc(size); | |
78 #else | |
637 | 79 posix_memalign(&buff, alignment, size); |
666 | 80 #endif |
736 | 81 if (buff==0) |
82 get_scheduler()->printf("Can't allocate memory\n"); | |
637 | 83 return buff; |
84 } | |
85 | |
86 void* allocate(int size) | |
87 { | |
899 | 88 void *buff = 0; |
637 | 89 if (size==0) return 0; |
666 | 90 #if defined(__SPU__) || ! defined(HAS_POSIX_MEMALIGN) |
91 buff = malloc(size); | |
92 #else | |
637 | 93 posix_memalign(&buff, DEFAULT_ALIGNMENT, size); |
666 | 94 #endif |
736 | 95 if (buff==0) |
96 get_scheduler()->printf("Can't allocate memory\n"); | |
637 | 97 return buff; |
98 } | |
99 | |
100 Scheduler* get_scheduler() { return scheduler; } | |
101 void set_scheduler(Scheduler *s) { scheduler = s; } | |
895
b662e9dd26b0
add alignment of classes in SPU
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
835
diff
changeset
|
102 } __attribute__ ((aligned (DEFAULT_ALIGNMENT))); |
619 | 103 |
3 | 104 #endif |