# HG changeset patch # User yutaka@localhost.localdomain # Date 1274271894 -32400 # Node ID 2746a16a86f5271bfc487857031e2d71f8360d30 # Parent 496a8159e840357e6a17a66f806a73cbf50e4925# Parent 30f84915713ba0c0d9b256274466514bc3f1b603 merge diff -r 496a8159e840 -r 2746a16a86f5 TaskManager/ChangeLog --- a/TaskManager/ChangeLog Wed May 19 14:59:41 2010 +0900 +++ b/TaskManager/ChangeLog Wed May 19 21:24:54 2010 +0900 @@ -1,3 +1,22 @@ +2010-5-11 Shinji KONO + + speTaskList_bg は追放するべきだと思われる。 + + PPE task はTaskList をすべて実行するまで戻って来ない。 + なので、spe のmail checkが疎かになっている。 + PPE task の実行途中で SPEのmail checkを行なうべき。 + + Fifo/Cell TaskManagerImpl は統一できるのではないか? + + SchedTask は今は各Taskのselfを返しているがTaskListにするべき + spe からのメールはTaskListが空になった時で良い。早めに、 + + PPE Taskを早めに起動する義理はある? あるかも知れない。Quick Reply Property。 + + TaskList もDataSegement化するべきだと思われる。 + + Scheduler::task_list もDataSegment化して、メインメモリ上に置く。 + 2010-4-28 Shinji KONO SchedTaskBase のみにインスタンス変数を書かせて、 diff -r 496a8159e840 -r 2746a16a86f5 TaskManager/kernel/schedule/SchedMail.h --- a/TaskManager/kernel/schedule/SchedMail.h Wed May 19 14:59:41 2010 +0900 +++ b/TaskManager/kernel/schedule/SchedMail.h Wed May 19 21:24:54 2010 +0900 @@ -12,17 +12,9 @@ /* constructor */ BASE_NEW_DELETE(SchedMail); - /* variables */ - memaddr params_addr; - /* functions */ SchedTaskBase* next(Scheduler *, SchedTaskBase *); -#if DEBUG - void read(void) { __debug("[SchedMail:%s]\n", __FUNCTION__); } - void exec(void) { __debug("[SchedMail:%s]\n", __FUNCTION__); } - void write(void) { __debug("[SchedMail:%s]\n", __FUNCTION__); } -#endif }; #endif diff -r 496a8159e840 -r 2746a16a86f5 TaskManager/kernel/schedule/SchedTask.h --- a/TaskManager/kernel/schedule/SchedTask.h Wed May 19 14:59:41 2010 +0900 +++ b/TaskManager/kernel/schedule/SchedTask.h Wed May 19 21:24:54 2010 +0900 @@ -1,8 +1,6 @@ #ifndef INCLUDED_SCHED_TASK #define INCLUDED_SCHED_TASK -#include -#include #include "base.h" #include "Scheduler.h" #include "SchedTaskBase.h" @@ -19,24 +17,8 @@ BASE_NEW_DELETE(SchedTask); - // Task Array しか使わないが、たいした大きさではないのでいいか... - ListData inListData; - ListData outListData; - /* variables */ -private: - - /** - * read データ、write 用のバッファ - * readbuf には タスク登録時に設定した入力データが入っている。 - * writebuf にデータを描き込んでおくと、 - * タスク登録時に設定した出力先に書き込む - */ - void *readbuf; - void *writebuf; - - /* functions */ // override @@ -47,10 +29,6 @@ // タスクの処理は、task_list に登録された C の関数によっておこなう - //--- System API --- - SchedTask* get_nextTask(TaskListPtr list); - - public: /* functions */ @@ -62,9 +40,9 @@ int write_size() { return task->w_size; } void set_write_size(int w) { task->w_size = w; } - virtual void* get_input(void *buff, int index); - virtual void* get_output(void *buff, int index); - virtual memaddr get_param(int index); + void* get_input(void *buff, int index); + void* get_output(void *buff, int index); + memaddr get_param(int index); memaddr get_inputAddr(int index); memaddr get_outputAddr(int index); // 書き出しを追加する API がない... @@ -125,13 +103,6 @@ Scheduler* get_scheduler(); long get_random(); - - /* system call */ - - FILE *stdout_; - FILE *stderr_; - FILE *stdin_; - int printf(const char * format, ...); }; diff -r 496a8159e840 -r 2746a16a86f5 TaskManager/kernel/schedule/SchedTaskArray.h --- a/TaskManager/kernel/schedule/SchedTaskArray.h Wed May 19 14:59:41 2010 +0900 +++ b/TaskManager/kernel/schedule/SchedTaskArray.h Wed May 19 21:24:54 2010 +0900 @@ -24,10 +24,6 @@ private: /* variables */ - TaskPtr atask; - void *readbuf; - void *writebuf; - /* functions */ Task *last(); diff -r 496a8159e840 -r 2746a16a86f5 TaskManager/kernel/schedule/SchedTaskArrayLoad.h --- a/TaskManager/kernel/schedule/SchedTaskArrayLoad.h Wed May 19 14:59:41 2010 +0900 +++ b/TaskManager/kernel/schedule/SchedTaskArrayLoad.h Wed May 19 21:24:54 2010 +0900 @@ -18,9 +18,6 @@ private: /* variables */ - void *readbuf; - SimpleTask *task; - /* functions */ // override diff -r 496a8159e840 -r 2746a16a86f5 TaskManager/kernel/schedule/SchedTaskArrayNop.cc --- a/TaskManager/kernel/schedule/SchedTaskArrayNop.cc Wed May 19 14:59:41 2010 +0900 +++ b/TaskManager/kernel/schedule/SchedTaskArrayNop.cc Wed May 19 21:24:54 2010 +0900 @@ -5,8 +5,8 @@ SchedTaskArrayNop::SchedTaskArrayNop(Scheduler *s, SchedTaskBase *savedTask_, Task *curTask_, Task *_array) { savedTask = savedTask_; - atask = (memaddr)savedTask->task->self; - array = _array; + params_addr = (memaddr)savedTask->task->self; + atask = _array; scheduler = s; inListData.bound = 0; @@ -55,8 +55,8 @@ SchedTaskArrayNop::write() { - scheduler->mail_write((memaddr)atask); - free(array); + scheduler->mail_write((memaddr)params_addr); + free(atask); } diff -r 496a8159e840 -r 2746a16a86f5 TaskManager/kernel/schedule/SchedTaskArrayNop.h --- a/TaskManager/kernel/schedule/SchedTaskArrayNop.h Wed May 19 14:59:41 2010 +0900 +++ b/TaskManager/kernel/schedule/SchedTaskArrayNop.h Wed May 19 21:24:54 2010 +0900 @@ -15,15 +15,9 @@ virtual ~SchedTaskArrayNop(); - - SchedTaskBase *savedTask; - Task *array; - private: /* variables */ - memaddr atask; - /* functions */ // override diff -r 496a8159e840 -r 2746a16a86f5 TaskManager/kernel/schedule/SchedTaskBase.h --- a/TaskManager/kernel/schedule/SchedTaskBase.h Wed May 19 14:59:41 2010 +0900 +++ b/TaskManager/kernel/schedule/SchedTaskBase.h Wed May 19 21:24:54 2010 +0900 @@ -3,6 +3,9 @@ #include "base.h" #include "Scheduler.h" +#include +#include + class Scheduler; @@ -18,7 +21,7 @@ BASE_NEW_DELETE(SchedTaskBase); // noaction in default - virtual void load() {} + // virtual void load() {} virtual void read() {} virtual void exec() {} virtual void write() {} @@ -26,18 +29,46 @@ /* functions */ virtual SchedTaskBase* next(Scheduler *, SchedTaskBase*) {return 0;} + virtual void* get_input(void *buff, int index) { return 0;} + virtual memaddr get_param(int index) { return 0;} + /* variables */ + // SchedTask は、すべて同じ大きさであるべきなので、継承するクラスには、 + // 変数を置かない。ここに、すべて置く。virtual も含めて。 + // Task を実行するスケジューラ自身 Scheduler *scheduler; SimpleTaskPtr task; + TaskPtr atask; + SchedTaskBase *savedTask; // 現在スケジューラが実行している TaskList と、このタスクに対応する Task TaskListPtr list; // Task の、Tasklist での位置。(task = &list[cur_index-1]) int cur_index; + memaddr params_addr; + + /** + * read データ、write 用のバッファ + * readbuf には タスク登録時に設定した入力データが入っている。 + * writebuf にデータを描き込んでおくと、 + * タスク登録時に設定した出力先に書き込む + */ + void *readbuf; + void *writebuf; + + /* system call */ + + FILE *stdout_; + FILE *stderr_; + FILE *stdin_; + + // Task Array しか使わないが、たいした大きさではないのでいいか... + ListData inListData; + ListData outListData; }; diff -r 496a8159e840 -r 2746a16a86f5 TaskManager/kernel/schedule/SchedTaskList.h --- a/TaskManager/kernel/schedule/SchedTaskList.h Wed May 19 14:59:41 2010 +0900 +++ b/TaskManager/kernel/schedule/SchedTaskList.h Wed May 19 21:24:54 2010 +0900 @@ -15,9 +15,6 @@ BASE_NEW_DELETE(SchedTaskList); - /* variables */ - memaddr params_addr; - /* override functions */ void read(); void exec(); diff -r 496a8159e840 -r 2746a16a86f5 example/post_function/Makefile.macosx --- a/example/post_function/Makefile.macosx Wed May 19 14:59:41 2010 +0900 +++ b/example/post_function/Makefile.macosx Wed May 19 21:24:54 2010 +0900 @@ -12,7 +12,7 @@ TASK_OBJS = $(TASK_SRCS:.cc=.o) LIBS += -lFifoManager `sdl-config --libs` -CC += -m64 +CC += -m32 .SUFFIXES: .cc .o diff -r 496a8159e840 -r 2746a16a86f5 example/share_task/Makefile.macosx --- a/example/share_task/Makefile.macosx Wed May 19 14:59:41 2010 +0900 +++ b/example/share_task/Makefile.macosx Wed May 19 21:24:54 2010 +0900 @@ -12,7 +12,7 @@ TASK_OBJS = $(TASK_SRCS:.cc=.o) LIBS += -lFifoManager `sdl-config --libs` -CC += -m64 +CC += -m32 .SUFFIXES: .cc .o diff -r 496a8159e840 -r 2746a16a86f5 example/word_count/main.cc --- a/example/word_count/main.cc Wed May 19 14:59:41 2010 +0900 +++ b/example/word_count/main.cc Wed May 19 21:24:54 2010 +0900 @@ -122,11 +122,12 @@ int index = 0; int array_task_num = 32; for (int i = 0; i < task_num; i += array_task_num) { + if (task_num-i < array_task_num) array_task_num = task_num-i; HTask *task_main = manager->create_task_array(TASK_EXEC,array_task_num,2,1,1); t_print->wait_for(task_main); int j ; Task *t_exec = 0; - for(j = 0; j < array_task_num; j++) { + for(j = 0; j < array_task_num ; j++) { t_exec = task_main->next_task_array(TASK_EXEC,t_exec); // t_exec = manager->create_task(TASK_EXEC);