Mercurial > hg > Members > kono > Cerium
comparison TaskManager/Cell/CellTaskManagerImpl.cc @ 940:0d404f6c36a8
unknown dead lock still...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 31 Jul 2010 16:44:10 +0900 |
parents | 9cfac2e8fc2e |
children | 15026ebf7a17 |
comparison
equal
deleted
inserted
replaced
939:9cfac2e8fc2e | 940:0d404f6c36a8 |
---|---|
69 } | 69 } |
70 } | 70 } |
71 | 71 |
72 // SPE_ANY が指定されていた時に | 72 // SPE_ANY が指定されていた時に |
73 // これをインクリメントしつつ呼ぶことにする。 | 73 // これをインクリメントしつつ呼ぶことにする。 |
74 // 乱数使ってもいいけどさ。 | 74 unsigned int cur_anySpeid = 0; |
75 int cur_anySpeid = 0; | |
76 | 75 |
77 /** | 76 /** |
78 * ActiveTaskQueue から Task を | 77 * ActiveTaskQueue から Task を |
79 * 各 SPE に渡す (backgound) TaskList に入れる | 78 * 各 SPE に渡す (backgound) TaskList に入れる |
80 * | 79 * |
88 | 87 |
89 while (HTaskPtr htask = activeTaskQueue->poll()) { | 88 while (HTaskPtr htask = activeTaskQueue->poll()) { |
90 | 89 |
91 if (htask->cpu_type == SPE_ANY) { | 90 if (htask->cpu_type == SPE_ANY) { |
92 speid = cur_anySpeid++; | 91 speid = cur_anySpeid++; |
93 cur_anySpeid = (cur_anySpeid < machineNum) | |
94 ? cur_anySpeid : 0; | |
95 } else { | 92 } else { |
96 // -1 してるのは | 93 // -1 してるのは |
97 // htask->cpu_type - CPU_SPE で | 94 // htask->cpu_type - CPU_SPE で |
98 // SPE0 = 1, SPE1 = 2, ... SPE5 = 6 ってなってるので | 95 // SPE0 = 1, SPE1 = 2, ... SPE5 = 6 ってなってるので |
99 // 配列的 (SPE0 = arr[0], SPE1 = arr[1]) にするため | 96 // 配列的 (SPE0 = arr[0], SPE1 = arr[1]) にするため |
100 speid = htask->cpu_type - CPU_SPE - 1; | 97 speid = htask->cpu_type - CPU_SPE - 1; |
101 | 98 } |
102 // SPU の数以上が指定されていれば | 99 speid %= machineNum; |
103 // とりあえず MAX_USE_SPE_NUM (実際に動く SPE の最大数) で | |
104 // あまり求めてそれを使うことにする。 | |
105 // ここで判定するもんでもないか? | |
106 if (speid >= machineNum) { | |
107 speid %= machineNum; | |
108 } | |
109 } | |
110 set_taskList(htask, taskListInfo[speid]); | 100 set_taskList(htask, taskListInfo[speid]); |
111 } | 101 } |
112 } | 102 } |
113 | 103 |
114 void | 104 void |
177 printf(" Waiting task%d %lx",p->command, (long)p); | 167 printf(" Waiting task%d %lx",p->command, (long)p); |
178 TaskQueueInfo *w = p->wait_i; | 168 TaskQueueInfo *w = p->wait_i; |
179 if (w) { | 169 if (w) { |
180 for( TaskQueue *q = w->getFirst(); q; q = w->getNext(q)) { | 170 for( TaskQueue *q = w->getFirst(); q; q = w->getNext(q)) { |
181 printf(" waiting task%d %lx",q->task->command, (long)q->task); | 171 printf(" waiting task%d %lx",q->task->command, (long)q->task); |
182 if (!waitTaskQueue->find(q->task)) printf("!"); // stray task | 172 if (!waitTaskQueue->find(q->task)) { |
173 printf("!"); // stray task | |
174 } | |
183 loop_check(q->task,p, 10); | 175 loop_check(q->task,p, 10); |
184 } | 176 } |
185 } | 177 } |
186 printf("\n"); | 178 printf("\n"); |
187 } | 179 } |