Mercurial > hg > Members > kono > Cerium
comparison TaskManager/Cell/CellTaskManagerImpl.cc @ 801:974cd68383b3
TaslListInfo
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 22 May 2010 18:20:16 +0900 |
parents | 5088d70e66c5 |
children | 8a6f1fa038de |
comparison
equal
deleted
inserted
replaced
800:2708c4a7bade | 801:974cd68383b3 |
---|---|
89 * spe に渡される Task だけ入っている | 89 * spe に渡される Task だけ入っている |
90 */ | 90 */ |
91 void | 91 void |
92 CellTaskManagerImpl::set_runTaskList() | 92 CellTaskManagerImpl::set_runTaskList() |
93 { | 93 { |
94 TaskListPtr list; | |
95 SimpleTaskPtr task; | |
96 int speid; | 94 int speid; |
97 | 95 |
98 while (HTaskPtr htask = activeTaskQueue->poll()) { | 96 while (HTaskPtr htask = activeTaskQueue->poll()) { |
99 | 97 |
100 if (htask->cpu_type == SPE_ANY) { | 98 if (htask->cpu_type == SPE_ANY) { |
115 if (speid >= machineNum) { | 113 if (speid >= machineNum) { |
116 speid %= machineNum; | 114 speid %= machineNum; |
117 } | 115 } |
118 } | 116 } |
119 | 117 |
120 list = speTaskList_bg[speid]; | 118 TaskListInfoPtr list = speTaskList_bg[speid]; |
121 | 119 set_taskList(htask, list); |
122 if (list->length >= TASK_MAX_SIZE) { | |
123 TaskListPtr newList = taskListImpl->create(); | |
124 newList = TaskListInfo::append(newList, speTaskList_bg[speid]); | |
125 speTaskList_bg[speid] = newList; | |
126 list = newList; | |
127 } | |
128 | |
129 task = &list->tasks[list->length++]; | |
130 | |
131 if (htask->command==TaskArray1) { | |
132 // compatibility | |
133 // Task with ListData is stored in the ListData | |
134 int next = (htask->r_size)/sizeof(SimpleTask) + 1; | |
135 if (list->length+next>=TASK_MAX_SIZE) { | |
136 list->length--; | |
137 TaskListPtr newList = taskListImpl->create(); | |
138 newList = TaskListInfo::append(newList, speTaskList_bg[speid]); | |
139 speTaskList_bg[speid] = newList; | |
140 list = newList; | |
141 task = &list->tasks[list->length++]; | |
142 } | |
143 Task *array = (Task*)&list->tasks[list->length]; | |
144 list->length += next; | |
145 memcpy(array, htask->rbuf, htask->r_size); | |
146 free(htask->rbuf); | |
147 htask->rbuf = 0; htask->r_size = 0; | |
148 *task = *(SimpleTask*)htask; | |
149 } else { | |
150 *task = *(SimpleTask*)htask; | |
151 } | |
152 | |
153 } | 120 } |
154 } | 121 } |
155 | 122 |
156 void | 123 void |
157 CellTaskManagerImpl::sendTaskList() | 124 CellTaskManagerImpl::sendTaskList() |
169 { | 136 { |
170 TaskListPtr ppeTaskList = NULL; | 137 TaskListPtr ppeTaskList = NULL; |
171 | 138 |
172 do { | 139 do { |
173 // PPE side | 140 // PPE side |
174 ppeTaskList = ppeManager->get_runTaskList(); | 141 ppeTaskList = ppeManager->set_runTaskList(); |
175 if (ppeTaskList) | 142 if (ppeTaskList) |
176 ppeManager->sendTaskList(ppeTaskList); | 143 ppeManager->sendTaskList(ppeTaskList); |
177 ppeManager->mail_check(); | 144 ppeManager->mail_check(); |
178 // SPE side | 145 // SPE side |
179 do { | 146 do { |
265 speTaskList_bg[id] = tmp; | 232 speTaskList_bg[id] = tmp; |
266 | 233 |
267 taskListImpl->clear_taskList(speTaskList_bg[id]); | 234 taskListImpl->clear_taskList(speTaskList_bg[id]); |
268 | 235 |
269 speThreads->send_mail(id, 1, (memaddr *)&speTaskList[id]); | 236 speThreads->send_mail(id, 1, (memaddr *)&speTaskList[id]); |
270 flag_sendTaskList[id] = 0; | |
271 } | 237 } |
272 | 238 |
273 void CellTaskManagerImpl::show_profile() { | 239 void CellTaskManagerImpl::show_profile() { |
274 for (int id = 0; id < machineNum; id++) { | 240 for (int id = 0; id < machineNum; id++) { |
275 HTaskPtr t = create_task(ShowTime); | 241 HTaskPtr t = create_task(ShowTime); |