Mercurial > hg > Members > kono > Cerium
changeset 646:ffcc25c7c566
send_mailList fix.
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 21 Nov 2009 11:20:29 +0900 |
parents | 07bd86a352eb |
children | 7c9ded1ea750 d0b8860c17f8 |
files | TaskManager/ChangeLog |
diffstat | 1 files changed, 50 insertions(+), 33 deletions(-) [+] |
line wrap: on
line diff
--- a/TaskManager/ChangeLog Sat Nov 21 11:18:49 2009 +0900 +++ b/TaskManager/ChangeLog Sat Nov 21 11:20:29 2009 +0900 @@ -1,41 +1,58 @@ 2009-11-20 Shinji KONO <kono@ie.u-ryukyu.ac.jp> -mail_sendQueue の実装がだめ。こういう実装をすると、queue の -正しさを関数の中に閉じ込められない。なんか、無限リストにな -っているらしい。参照が、渡り歩いているどこかの場所でダメに -なっているらしい。 - -実際、mail_sendQueue は、free list に置き換わってしまう。 -これまで、これがおかしならなかった理由は不明。 - -connector に外から手を入れないで、ちゃんとfunction callするべし。 + mail_sendQueue の実装がだめ。こういう実装をすると、queue の + 正しさを関数の中に閉じ込められない。なんか、無限リストにな + っているらしい。参照が、渡り歩いているどこかの場所でダメに + なっているらしい。 + + 実際、mail_sendQueue は、free list に置き換わってしまう。 + これまで、これがおかしならなかった理由は不明。 + + connector に外から手を入れないで、ちゃんとfunction callするべし。 + + わかりました。 + if (list) { + ... + mainScheduler->send_mailList(in_mail_list); + } + out_mail_list = mainScheduler->recv_mailList(); + + としてしまったが、recv_mailList() でなく、send_mailList で、 + mail_sendQueue をクリアしていたので、 + } else { + mainScheduler->send_mailList(in_mail_list); + } + とする必要があったらしい。if (list) を入れたせいで、こうなった。 + でも、当然、recv_mailList() で clear するべき。atomicity の意味でも。 + なので、send_mailList() での clear は必要ない。 + 2009-11-19 Shinji KONO <kono@ie.u-ryukyu.ac.jp> -finish_task を全員が待つ設定で、finish_task を終了判定に -使っている。それだと、すべてのtaskが、finish_task のwait queue -を*必ず*触りにいってしまう。 - -finish_task への待ちを取り除くと、CellTaskManagerImpl::run() -が、 - do { - ppeMail = ppeManager->schedule(ppeTaskList); - cont: - ppeTaskList = mail_check(ppeMail); - } while (ppeTaskList); -とかやっているので、ここで抜けてしまう。 - -要するに、SPUの状態を見て、running がなくなるのを調べるべき -なんだが、SpeTheads は「一つしかない」らしい。spe_running -で、走っているものがあるかどうか見るか? - -Cell だと、MainScheduler と FifoScheduler の二種類の -スケジューラがあるのか。 - - MainScheduler --- task list -----> FifoScheduler - MainScheduler <-- finish task ---- FifoScheduler - -というわけね。 + finish_task を全員が待つ設定で、finish_task を終了判定に + 使っている。それだと、すべてのtaskが、finish_task のwait queue + を*必ず*触りにいってしまう。 + + finish_task への待ちを取り除くと、CellTaskManagerImpl::run() + が、 + do { + ppeMail = ppeManager->schedule(ppeTaskList); + cont: + ppeTaskList = mail_check(ppeMail); + } while (ppeTaskList); + とかやっているので、ここで抜けてしまう。 + + 要するに、SPUの状態を見て、running がなくなるのを調べるべき + なんだが、SpeTheads は「一つしかない」らしい。spe_running + で、走っているものがあるかどうか見るか? + + Cell だと、MainScheduler と FifoScheduler の二種類の + スケジューラがあるのか。 + + MainScheduler --- task list -----> FifoScheduler + MainScheduler <-- finish task ---- FifoScheduler + + というわけね。 2009-11-15 Shinji KONO <kono@ie.u-ryukyu.ac.jp>