changeset 721:2b167196cb27

cleanups..
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 19 Dec 2009 12:12:09 +0900
parents dac59b74e02a
children abad59c7e3ac
files TaskManager/Cell/CellTaskManagerImpl.cc TaskManager/ChangeLog TaskManager/Fifo/FifoTaskManagerImpl.cc TaskManager/Fifo/FifoTaskManagerImpl.h example/mainMem/Makefile.def example/mainMem/Makefile.macosx
diffstat 6 files changed, 76 insertions(+), 41 deletions(-) [+]
line wrap: on
line diff
--- 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");
+    }
 }
 
 /**
--- 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 <kono@ie.u-ryukyu.ac.jp>
 
    CellTaskManagerのTaskList_bg は変だよ。TaskList 自体が
--- 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
+
 
 /**
  * # # # # # # # # 
--- 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
 
--- 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
--- 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)