changeset 814:f3aa4ba65b76

log
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 23 May 2010 08:12:22 +0900
parents f3f982bc271c
children 9d228182911a
files TaskManager/ChangeLog TaskManager/kernel/ppe/HTask.cc
diffstat 2 files changed, 56 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/TaskManager/ChangeLog	Sun May 23 00:25:00 2010 +0900
+++ b/TaskManager/ChangeLog	Sun May 23 08:12:22 2010 +0900
@@ -1,24 +1,39 @@
 2010-5-22 Shinji KONO <kono@ie.u-ryukyu.ac.jp>
 
-   CpuThread を作るなら、create_task は、manager にメールで教えないとだめ。
-   CpuManager みたいなものを用意しないとダメか。
+    CpuThread を作るなら、create_task は、manager にメールで教えないとだめ。
+    CpuManager みたいなものを用意しないとダメか。
+
+    HTask から、waitfor/create_task とかは、TaskManager を呼んでいる。
+    そのたびに CAS (Check and set) するのはばかげているよな〜
+    TaskManager にメールで送る方が良いのではないか。
+
+    wait_for する Task が既に終了していると、存在しないTaskあるいは、
+    別な Task を wait_for する場合がある。いわゆるゾンビだけど、これは
+    どうしよう? 生きているかどうかを識別するように id を付けるか?
+
+    どうも、TaskManager.{h,cc} は要らないっぽい。TMmain に渡されるのも
+    SchedTask である方が自然。
+
+    TaskListInfo は循環リストなので、SPU/PPU scheduler に渡す前に、
+    getLast()->next = 0 する必要がある。freeAll() する前に、直さないと
+    だめ。getList() みたいなものを用意しても良いが...
 
 2010-5-11 Shinji KONO <kono@ie.u-ryukyu.ac.jp>
 
-    speTaskList_bg は追放するべきだと思われる。
+    speTaskList_bg は追放するべきだと思われる。(done)
 
     PPE task はTaskList をすべて実行するまで戻って来ない。
     なので、spe のmail checkが疎かになっている。
     PPE task の実行途中で SPEのmail checkを行なうべき。
 
-    Fifo/Cell TaskManagerImpl は統一できるのではないか?
+    Fifo/Cell TaskManagerImpl は統一できるのではないか? (done)
 
     SchedTask は今は各Taskのselfを返しているがTaskListにするべき
     spe からのメールはTaskListが空になった時で良い。早めに、
 
     PPE Taskを早めに起動する義理はある? あるかも知れない。Quick Reply Property。
 
-    TaskList もDataSegement化するべきだと思われる。
+    TaskList もDataSegement化するべきだと思われる。(done)
 
     Scheduler::task_list もDataSegment化して、メインメモリ上に置く。
 
@@ -26,7 +41,7 @@
 
     SchedTaskBase のみにインスタンス変数を書かせて、
     SchedTask*.h には method のみを書かせる。
-    そうすると、デバッグが楽だし、object のallocateも楽。
+    そうすると、デバッグが楽だし、object のallocateも楽。(done)
 
    HTask(list) -> TaskList(array) -> SchedTask
 
@@ -34,9 +49,9 @@
     それを DataSegment で共有する。
 
     SimpleTask のMailを、
-   if (mail_is_not_full) send_mail() ;
-   else if (queue is not full) enqueuue() ;
-   else wait_mail();
+       if (mail_is_not_full) send_mail() ;
+       else if (queue is not full) enqueuue() ;
+       else wait_mail();
     ってな感じに出来ないの?
 
     Multi thread にすると、PPEのmail loop が暴走する可能性がある。
--- a/TaskManager/kernel/ppe/HTask.cc	Sun May 23 00:25:00 2010 +0900
+++ b/TaskManager/kernel/ppe/HTask.cc	Sun May 23 08:12:22 2010 +0900
@@ -29,19 +29,30 @@
 
   wait_for している Task の入力バッファにこの Task から書き込みできる機能があると良い
  */
-
 void
 HTask::wait_for(HTaskPtr master)
 {
     mimpl->set_task_depend(master, this);
 }
 
+/**
+ * タスクが実行する CPU を選択する
+ *
+ * 現在は CPU_PPE, CPU_SPE, SPE_ANY, SPE_0, SPE_1, ..., SPE_5
+ * types.h に書いてます。
+ * 
+ * mimpl によって使えるCPUが異なるので、mimpl に任せる必要がある
+ */
 void
 HTask::set_cpu(CPU_TYPE type)
 {
     mimpl->set_task_cpu(this, type);
 }
 
+/*!
+  @brief このTaskが終了した時に実行する関数
+  @param arg1, arg2 の二つの引数を持つ (Task に合わせてある)
+ */
 void
 HTask::set_post(PostFunction func,void *arg1, void *arg2)
 {
@@ -51,6 +62,15 @@
 }
 
 
+/*!
+  @brief まとまって実行されるTask である Task Array の作成
+  @param id           Task ID
+  @param num_task     実行する Task の数
+  @param num_param    一つのTaskがset_paramする数
+  @param num_inData   一つのTaskが読み込む Data の数、set_inData の数
+  @param num_outData  一つのTaskが書き出す Data の数、set_outData の数
+  @return  Task Array へのポインタ
+ */
 Task *
 HTask::create_task_array(int id, int num_task, int num_param, int num_inData, int num_outData)
 {
@@ -63,6 +83,12 @@
     return task;  // first task
 }
 
+/*!
+  @brief Task Array の次のTask
+  @param t            今のTaskのポインタ
+                      0 の場合は最初のTask
+  @return  次のTaskへのポインタ
+ */
 Task *
 HTask::next_task_array(int id, Task *t)
 {
@@ -79,6 +105,11 @@
     return next;
 }
 
+/*!
+  @brief Task Array の中のすべてのTaskが書き込まれたかどうかをチェックする
+         TaskArray 自体の spawn() は別に必要
+  @param last            今のTaskのポインタ (最後である必要がある)
+ */
 void
 HTask::spawn_task_array(Task * last)
 {