# HG changeset patch # User Shinji KONO # Date 1261192329 -32400 # Node ID 2b167196cb27e4579ac52aadbe2ea0d0cc2a5603 # Parent dac59b74e02a9690de0942b423b6ee70427bd1a7 cleanups.. diff -r dac59b74e02a -r 2b167196cb27 TaskManager/Cell/CellTaskManagerImpl.cc --- a/TaskManager/Cell/CellTaskManagerImpl.cc Sat Dec 19 10:43:19 2009 +0900 +++ b/TaskManager/Cell/CellTaskManagerImpl.cc Sat Dec 19 12:12:09 2009 +0900 @@ -154,6 +154,17 @@ } void +CellTaskManager::sednTaskList() +{ + for (int i = 0; i < machineNum; i++) { + if (flag_sendTaskList[i] == 1 && speTaskList_bg[i]->length >= 1 ) { + send_taskList(i); + spe_running++; + } + } +} + +void CellTaskManagerImpl::run() { TaskListPtr ppeTaskList = NULL; @@ -161,7 +172,8 @@ do { // PPE side ppeTaskList = ppeManager->get_runTaskList(); - ppeManager->schedule(ppeTaskList); + if (ppeTaskList) + ppeManager->sendTaskList(ppeTaskList); ppeManager->mail_check(); // SPE side do { @@ -169,14 +181,12 @@ // SPE に送る TaskList の準備 set_runTaskList(); // TaskList 待ちの SPE に TaskList を送る - for (int i = 0; i < machineNum; i++) { - if (flag_sendTaskList[i] == 1 && speTaskList_bg[i]->length >= 1 ) { - send_taskList(i); - spe_running++; - } - } - } while (ppeManager->activeTaskQueue->empty() && !waitTaskQueue->empty()); - } while (ppeTaskList || spe_running >0); + sednTaskList(); + } while (ppeManager->activeTaskQueue->empty()); + } while (ppeTaskList || spe_running >0); + if (!waitTaskQueue->empty()) { + fprintf(stderr,"Dead lock detected\n"); + } } /** diff -r dac59b74e02a -r 2b167196cb27 TaskManager/ChangeLog --- a/TaskManager/ChangeLog Sat Dec 19 10:43:19 2009 +0900 +++ b/TaskManager/ChangeLog Sat Dec 19 12:12:09 2009 +0900 @@ -7,6 +7,9 @@ となると、TaskList のfree(clear)のtimingは? schdule から抜けた 時と言うことになるわけだけど。 + waitQueue は、実は不要。しかし、終了条件、dead lock detection には + 必要らしい。 + 2009-12-16 Shinji KONO CellTaskManagerのTaskList_bg は変だよ。TaskList 自体が diff -r dac59b74e02a -r 2b167196cb27 TaskManager/Fifo/FifoTaskManagerImpl.cc --- a/TaskManager/Fifo/FifoTaskManagerImpl.cc Sat Dec 19 10:43:19 2009 +0900 +++ b/TaskManager/Fifo/FifoTaskManagerImpl.cc Sat Dec 19 12:12:09 2009 +0900 @@ -9,6 +9,8 @@ #include "SchedNop.h" #include "SysFunc.h" +// static void send_alloc_reply(FifoTaskManagerImpl *tm, int id, MainScheduler *s); + FifoTaskManagerImpl::~FifoTaskManagerImpl() { delete mainScheduler; @@ -71,10 +73,8 @@ } -void FifoTaskManagerImpl::show_profile() { - printf("HEHEHEHEH\n"); -} -void FifoTaskManagerImpl::start_profile() {} +// void FifoTaskManagerImpl::show_profile() {} +// void FifoTaskManagerImpl::start_profile() {} /** * スケジューラに渡す TaskList を取得する。 @@ -144,17 +144,15 @@ { TaskListPtr list; - list = get_runTaskList(); - - do { + while((list = get_runTaskList())) { // list を実行する - schedule(list); - + sendTaskList(list); // ppe scheduler からの mail を調べる mail_check(); - - list = get_runTaskList(); - } while (list); + } + if (!waitTaskQueue->empty()) { + fprintf(stderr,"Dead lock detected\n"); + } } /** @@ -164,20 +162,18 @@ * [Tasklist] -> [番兵] -> scheduler->run を抜ける */ void -FifoTaskManagerImpl::schedule(TaskListPtr list) +FifoTaskManagerImpl::sendTaskList(TaskListPtr list) { - if (list) { - // TaskList のアドレスを送る - mainScheduler->mail_write_from_host((memaddr)list); + // TaskList のアドレスを送る + mainScheduler->mail_write_from_host((memaddr)list); - // EXIT_COMMAND (番兵的な意味で) - // これを読むと、mainScheduler->run() から抜けて来る。 - mainScheduler->mail_write_from_host((memaddr)MY_SPE_COMMAND_EXIT); + // EXIT_COMMAND (番兵的な意味で) + // これを読むと、mainScheduler->run() から抜けて来る。 + mainScheduler->mail_write_from_host((memaddr)MY_SPE_COMMAND_EXIT); - // scheduler は受け取ったメールを元に実行する - // new SchedTaskList(list, mainScheduler) の方が良さそうだけど... - mainScheduler->run(new SchedNop()); - } + // scheduler は受け取ったメールを元に実行する + mainScheduler->run(new SchedNop()); + // すべてのlistを実行するまで戻らない } /** @@ -200,6 +196,11 @@ __debug_ppe("mail_check(): Task List finish\n"); } else if (data == (memaddr)MY_SPE_COMMAND_EXIT) { __debug_ppe("mail_check(): Task List finish COMMAND\n"); + } else if (data == (memaddr)MY_SPE_COMMAND_MALLOC) { + // MY_SPE_COMMAND_MALLOC PPE からのmain memory request + // 本来は呼ばれないはず... + fprintf(stderr, "error: MY_SPE_COMMAND_MALLOC from PPE\n"); + // send_alloc_reply(this, 0, mainScheduler); } else if (data != (memaddr)MY_SPE_NOP) { __debug_ppe("mail_check(): recv from 0x%x\n", data); // post_func を先に実行しないと、systask_finish が active_queue @@ -211,6 +212,30 @@ } } +#if 0 +static void +send_alloc_reply(FifoTaskManagerImpl *tm, int id, MainScheduler *s) +{ + /** + * info[0] = alloc_id; (CellScheduler::mainMem_alloc 参照) + * info[1] = alloc_addr; + */ + memaddr alloc_info[2]; + long alloc_size; + long command; + + alloc_info[0] = s->mail_read_from_host(); + alloc_info[1] = s->mail_read_from_host(); + command = (long)alloc_info[0]; + alloc_size = (long)alloc_info[1]; + + alloc_info[1] = (memaddr)tm->allocate(alloc_size); + + s->mail_write_from_host(alloc_info[0]); + s->mail_write_from_host(alloc_info[1]); +} +#endif + /** * # # # # # # # # diff -r dac59b74e02a -r 2b167196cb27 TaskManager/Fifo/FifoTaskManagerImpl.h --- a/TaskManager/Fifo/FifoTaskManagerImpl.h Sat Dec 19 10:43:19 2009 +0900 +++ b/TaskManager/Fifo/FifoTaskManagerImpl.h Sat Dec 19 12:12:09 2009 +0900 @@ -23,14 +23,14 @@ void init(void); void init(MainScheduler*, TaskManagerImpl*); void run(void); - void show_profile() ; - void start_profile() ; + void show_profile() {}; + void start_profile() {}; void mail_check(); TaskListPtr get_runTaskList(void); - void schedule(TaskListPtr); + void sendTaskList(TaskListPtr); // call by user diff -r dac59b74e02a -r 2b167196cb27 example/mainMem/Makefile.def --- a/example/mainMem/Makefile.def Sat Dec 19 10:43:19 2009 +0900 +++ b/example/mainMem/Makefile.def Sat Dec 19 12:12:09 2009 +0900 @@ -6,9 +6,10 @@ # ex: linux/ps3 CERIUM = ../../../Cerium +ABIBIT = 32 CC = g++ -CFLAGS = -g -Wall -O9 +CFLAGS = -g -Wall -O9 -m$(ABIBIT) INCLUDE = -I${CERIUM}/include/TaskManager -I. -I.. LIBS = -L${CERIUM}/TaskManager diff -r dac59b74e02a -r 2b167196cb27 example/mainMem/Makefile.macosx --- a/example/mainMem/Makefile.macosx Sat Dec 19 10:43:19 2009 +0900 +++ b/example/mainMem/Makefile.macosx Sat Dec 19 12:12:09 2009 +0900 @@ -1,7 +1,5 @@ include ./Makefile.def -CC += -m64 - SRCS_TMP = $(wildcard *.cc) SRCS_EXCLUDE = # ե SRCS = $(filter-out $(SRCS_EXCLUDE),$(SRCS_TMP)) @@ -23,10 +21,8 @@ all: $(TARGET) $(TARGET): $(OBJS) $(TASK_OBJS) - $(CC) -o $@ $(OBJS) $(TASK_OBJS) $(LIBS) + $(CC) -m$(ABIBIT) -o $@ $(OBJS) $(TASK_OBJS) $(LIBS) -link: - $(CC) -o $(TARGET) $(OBJS) $(TASK_OBJS) $(LIBS) debug: $(TARGET) sudo gdb ./$(TARGET)