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);