Mercurial > hg > Game > Cerium
comparison TaskManager/kernel/ppe/TaskManagerImpl.cc @ 298:768452fab95e draft
from EUC to UTF-8
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 07 Jun 2009 15:17:41 +0900 |
parents | 305ac1897c50 |
children | 205e4a4af635 |
comparison
equal
deleted
inserted
replaced
297:54725883131b | 298:768452fab95e |
---|---|
14 | 14 |
15 TaskManagerImpl::TaskManagerImpl(int num) | 15 TaskManagerImpl::TaskManagerImpl(int num) |
16 : machineNum(num), activeTaskQueue(NULL), waitTaskQueue(NULL) {} | 16 : machineNum(num), activeTaskQueue(NULL), waitTaskQueue(NULL) {} |
17 | 17 |
18 /** | 18 /** |
19 * 一番最初に PPE で実行される systask_start | 19 * 筝 PPE у茵 systask_start |
20 * 一番最後に、全てのタスクの終了を待つ systask_finish | 20 * 筝緇帥鴻腟篋緇 systask_finish |
21 * 番兵的な意味で実装 | 21 * 窮潟у茖 |
22 */ | 22 */ |
23 void | 23 void |
24 TaskManagerImpl::systask_init(void) | 24 TaskManagerImpl::systask_init(void) |
25 { | 25 { |
26 systask_register(); | 26 systask_register(); |
28 systask_start = create_task(SYSTASK_START); | 28 systask_start = create_task(SYSTASK_START); |
29 systask_finish = create_task(SYSTASK_FINISH); | 29 systask_finish = create_task(SYSTASK_FINISH); |
30 | 30 |
31 systask_start->spawn(); | 31 systask_start->spawn(); |
32 | 32 |
33 // systask_finish で spawn すると | 33 // systask_finish spawn |
34 // systask_finish->wait_for(systask_finish); | 34 // systask_finish->wait_for(systask_finish); |
35 // とかなって無限ループになるので、 | 35 // c♂若с |
36 // これだけは明示的に append_waitTask() で | 36 // 腓榊 append_waitTask() |
37 append_waitTask(systask_finish); | 37 append_waitTask(systask_finish); |
38 } | 38 } |
39 | 39 |
40 HTaskPtr | 40 HTaskPtr |
41 TaskManagerImpl::create_task(int cmd) | 41 TaskManagerImpl::create_task(int cmd) |
48 | 48 |
49 return new_task; | 49 return new_task; |
50 } | 50 } |
51 | 51 |
52 /** | 52 /** |
53 * task の依存関係を設定 | 53 * task 箴絖≫荐絎 |
54 * master task が終わってから、slave task を実行するように | 54 * master task 腟cslave task 絎茵 |
55 * master->wait_for(slave); | 55 * master->wait_for(slave); |
56 */ | 56 */ |
57 void | 57 void |
58 TaskManagerImpl::set_task_depend(HTaskPtr master, HTaskPtr slave) | 58 TaskManagerImpl::set_task_depend(HTaskPtr master, HTaskPtr slave) |
59 { | 59 { |
65 master->wait_me = TaskQueue::append(master->wait_me, s); | 65 master->wait_me = TaskQueue::append(master->wait_me, s); |
66 slave->wait_i = TaskQueue::append(slave->wait_i, m); | 66 slave->wait_i = TaskQueue::append(slave->wait_i, m); |
67 } | 67 } |
68 | 68 |
69 /** | 69 /** |
70 * タスクを実行可能キューまたは待機キューへ追加する。 | 70 * 帥鴻絎茵純ャ若障緇罘ャ若梧申 |
71 * 依存関係が満たされていれば active, まだだったら wait へ。 | 71 * 箴絖≫羣 active, 障c wait 吾 |
72 * task->spawn(); | 72 * task->spawn(); |
73 */ | 73 */ |
74 void | 74 void |
75 TaskManagerImpl::spawn_task(HTaskPtr task) | 75 TaskManagerImpl::spawn_task(HTaskPtr task) |
76 { | 76 { |
84 | 84 |
85 systask_finish->wait_for(task); | 85 systask_finish->wait_for(task); |
86 } | 86 } |
87 | 87 |
88 /** | 88 /** |
89 * Task を実行可能キューに追加する | 89 * Task 絎茵純ャ若菴遵 |
90 */ | 90 */ |
91 void | 91 void |
92 TaskManagerImpl::append_activeTask(HTaskPtr task) | 92 TaskManagerImpl::append_activeTask(HTaskPtr task) |
93 { | 93 { |
94 TaskQueuePtr q; | 94 TaskQueuePtr q; |
96 q = bufferManager->create_taskQueue(task); | 96 q = bufferManager->create_taskQueue(task); |
97 activeTaskQueue = TaskQueue::append(activeTaskQueue, q); | 97 activeTaskQueue = TaskQueue::append(activeTaskQueue, q); |
98 } | 98 } |
99 | 99 |
100 /** | 100 /** |
101 * タスクが実行する CPU を選択する | 101 * 帥鴻絎茵 CPU 御 |
102 * | 102 * |
103 * 現在は CPU_PPE, CPU_SPE, SPE_ANY, SPE_0, SPE_1, ..., SPE_5 | 103 * 憜 CPU_PPE, CPU_SPE, SPE_ANY, SPE_0, SPE_1, ..., SPE_5 |
104 * types.h に書いてます。 | 104 * types.h 吾障 |
105 */ | 105 */ |
106 void | 106 void |
107 TaskManagerImpl::set_task_cpu(HTaskPtr task, CPU_TYPE type) | 107 TaskManagerImpl::set_task_cpu(HTaskPtr task, CPU_TYPE type) |
108 { | 108 { |
109 task->cpu_type = type; | 109 task->cpu_type = type; |
110 } | 110 } |
111 | 111 |
112 /** | 112 /** |
113 * 終了したタスクから依存の処理とか | 113 * 腟篋帥鴻箴絖 |
114 * post_func() はこのタスクが終了したら実行する関数。 | 114 * post_func() 帥鴻腟篋絎茵∽違 |
115 * 今のところ使ってないっす | 115 * 篁篏帥cc |
116 * | 116 * |
117 * @param [task] 終了したタスク | 117 * @param [task] 腟篋帥鴻 |
118 */ | 118 */ |
119 void | 119 void |
120 TaskManagerImpl::check_task_finish(HTaskPtr task) | 120 TaskManagerImpl::check_task_finish(HTaskPtr task) |
121 { | 121 { |
122 notify_wait_taskQueue(task, task->wait_me); | 122 notify_wait_taskQueue(task, task->wait_me); |
123 task->post_func(task->post_arg); | 123 task->post_func(task->post_arg); |
124 bufferManager->free_task(task); | 124 bufferManager->free_task(task); |
125 } | 125 } |
126 | 126 |
127 /** | 127 /** |
128 * 終了したタスク [depend] を待っている TaskList に | 128 * 腟篋帥鴻 [depend] 緇c TaskList |
129 * 終わった事を知らせる(削除する | 129 * 腟c篋ャ(ゃ |
130 */ | 130 */ |
131 void | 131 void |
132 TaskManagerImpl::notify_wait_taskQueue(HTaskPtr depend, TaskQueuePtr list) | 132 TaskManagerImpl::notify_wait_taskQueue(HTaskPtr depend, TaskQueuePtr list) |
133 { | 133 { |
134 TaskQueuePtr p; | 134 TaskQueuePtr p; |
153 q = bufferManager->create_taskQueue(task); | 153 q = bufferManager->create_taskQueue(task); |
154 waitTaskQueue = TaskQueue::append(waitTaskQueue, q); | 154 waitTaskQueue = TaskQueue::append(waitTaskQueue, q); |
155 } | 155 } |
156 | 156 |
157 /** | 157 /** |
158 * waitQueue の中で依存関係を満たしたタスクは | 158 * waitQueue 筝т絖≫羣帥鴻 |
159 * activeQueue へ移す | 159 * activeQueue 悟Щ |
160 */ | 160 */ |
161 void | 161 void |
162 TaskManagerImpl::wakeup_waitTask(void) | 162 TaskManagerImpl::wakeup_waitTask(void) |
163 { | 163 { |
164 TaskQueuePtr p, tmp; | 164 TaskQueuePtr p, tmp; |
187 p = p1; | 187 p = p1; |
188 } | 188 } |
189 } | 189 } |
190 | 190 |
191 /** | 191 /** |
192 * [list] が持つ queue->task の中に [task] と同じ奴があれば | 192 * [list] queue->task 筝 [task] 絅眼 |
193 * 削除する。まあ remove_taskQueue() の HTask で比較するverです。 | 193 * ゃ障 remove_taskQueue() HTask ф莠verс |
194 * こういうのはオーバーロードでやるもんなのかな? | 194 * 若若若с鐚 |
195 */ | 195 */ |
196 TaskQueuePtr | 196 TaskQueuePtr |
197 TaskManagerImpl::remove_taskQueue_eq_task(TaskQueuePtr list, HTaskPtr task) | 197 TaskManagerImpl::remove_taskQueue_eq_task(TaskQueuePtr list, HTaskPtr task) |
198 { | 198 { |
199 TaskQueuePtr p = list; | 199 TaskQueuePtr p = list; |