comparison TaskManager/ChangeLog @ 646:9f9390b45f78 draft

send_mailList fix.
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 21 Nov 2009 11:20:29 +0900
parents ecf056ddd21a
children c7199f162b64
comparison
equal deleted inserted replaced
645:40d495194c8e 646:9f9390b45f78
1 2009-11-20 Shinji KONO <kono@ie.u-ryukyu.ac.jp> 1 2009-11-20 Shinji KONO <kono@ie.u-ryukyu.ac.jp>
2 2
3 mail_sendQueue の実装がだめ。こういう実装をすると、queue の 3 mail_sendQueue の実装がだめ。こういう実装をすると、queue の
4 正しさを関数の中に閉じ込められない。なんか、無限リストにな 4 正しさを関数の中に閉じ込められない。なんか、無限リストにな
5 っているらしい。参照が、渡り歩いているどこかの場所でダメに 5 っているらしい。参照が、渡り歩いているどこかの場所でダメに
6 なっているらしい。 6 なっているらしい。
7 7
8 実際、mail_sendQueue は、free list に置き換わってしまう。 8 実際、mail_sendQueue は、free list に置き換わってしまう。
9 これまで、これがおかしならなかった理由は不明。 9 これまで、これがおかしならなかった理由は不明。
10 10
11 connector に外から手を入れないで、ちゃんとfunction callするべし。 11 connector に外から手を入れないで、ちゃんとfunction callするべし。
12
13 わかりました。
14 if (list) {
15 ...
16 mainScheduler->send_mailList(in_mail_list);
17 }
18 out_mail_list = mainScheduler->recv_mailList();
19
20 としてしまったが、recv_mailList() でなく、send_mailList で、
21 mail_sendQueue をクリアしていたので、
22 } else {
23 mainScheduler->send_mailList(in_mail_list);
24 }
25 とする必要があったらしい。if (list) を入れたせいで、こうなった。
26 でも、当然、recv_mailList() で clear するべき。atomicity の意味でも。
27 なので、send_mailList() での clear は必要ない。
28
12 29
13 2009-11-19 Shinji KONO <kono@ie.u-ryukyu.ac.jp> 30 2009-11-19 Shinji KONO <kono@ie.u-ryukyu.ac.jp>
14 31
15 finish_task を全員が待つ設定で、finish_task を終了判定に 32 finish_task を全員が待つ設定で、finish_task を終了判定に
16 使っている。それだと、すべてのtaskが、finish_task のwait queue 33 使っている。それだと、すべてのtaskが、finish_task のwait queue
17 を*必ず*触りにいってしまう。 34 を*必ず*触りにいってしまう。
18 35
19 finish_task への待ちを取り除くと、CellTaskManagerImpl::run() 36 finish_task への待ちを取り除くと、CellTaskManagerImpl::run()
20 が、 37 が、
21 do { 38 do {
22 ppeMail = ppeManager->schedule(ppeTaskList); 39 ppeMail = ppeManager->schedule(ppeTaskList);
23 cont: 40 cont:
24 ppeTaskList = mail_check(ppeMail); 41 ppeTaskList = mail_check(ppeMail);
25 } while (ppeTaskList); 42 } while (ppeTaskList);
26 とかやっているので、ここで抜けてしまう。 43 とかやっているので、ここで抜けてしまう。
27 44
28 要するに、SPUの状態を見て、running がなくなるのを調べるべき 45 要するに、SPUの状態を見て、running がなくなるのを調べるべき
29 なんだが、SpeTheads は「一つしかない」らしい。spe_running 46 なんだが、SpeTheads は「一つしかない」らしい。spe_running
30 で、走っているものがあるかどうか見るか? 47 で、走っているものがあるかどうか見るか?
31 48
32 Cell だと、MainScheduler と FifoScheduler の二種類の 49 Cell だと、MainScheduler と FifoScheduler の二種類の
33 スケジューラがあるのか。 50 スケジューラがあるのか。
34 51
35 MainScheduler --- task list -----> FifoScheduler 52 MainScheduler --- task list -----> FifoScheduler
36 MainScheduler <-- finish task ---- FifoScheduler 53 MainScheduler <-- finish task ---- FifoScheduler
37 54
38 というわけね。 55 というわけね。
39 56
40 2009-11-15 Shinji KONO <kono@ie.u-ryukyu.ac.jp> 57 2009-11-15 Shinji KONO <kono@ie.u-ryukyu.ac.jp>
41 58
42 List DMAって、32bit address を使っているらしい。それは、ちょっと 59 List DMAって、32bit address を使っているらしい。それは、ちょっと
43 ひどいなぁ。 60 ひどいなぁ。