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;