Mercurial > hg > Game > Cerium
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 ひどいなぁ。 |