changeset 674:bde5f13adf10

fix many task example (sort). Dummy task is now system supported.
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 06 Dec 2009 00:54:10 +0900
parents d9111086b2c4
children 45ddb28c592d
files Renderer/Engine/RenderingTasks.h Renderer/Engine/task/dummy.cc Renderer/Engine/task/dummy.h Renderer/Engine/task/task_init.cc TaskManager/Fifo/FifoTaskManagerImpl.cc TaskManager/Makefile.def TaskManager/kernel/main.cc TaskManager/kernel/schedule/SchedTask.cc TaskManager/kernel/schedule/SchedTask.h TaskManager/kernel/sys_task/SysTasks.h example/many_task/Makefile.def example/many_task/main.cc example/many_task/sort.cc example/word_count_test/Makefile.def example/word_count_test/main.cc example/word_count_test/spe/Exec.cc
diffstat 16 files changed, 54 insertions(+), 62 deletions(-) [+]
line wrap: on
line diff
--- a/Renderer/Engine/RenderingTasks.h	Sat Dec 05 20:54:12 2009 +0900
+++ b/Renderer/Engine/RenderingTasks.h	Sun Dec 06 00:54:10 2009 +0900
@@ -17,7 +17,7 @@
      Move,
      Draw,
 
-     Dummy,
+     // Dummy,
 
      UpdateKey,
      InitKey,
--- a/Renderer/Engine/task/dummy.cc	Sat Dec 05 20:54:12 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-#include "dummy.h"
-
-SchedDefineTask(Dummy);
-
-static int
-run(SchedTask *s,void *rbuf, void *wbuf)
-{
-     return 0;
-}
--- a/Renderer/Engine/task/dummy.h	Sat Dec 05 20:54:12 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-#include "SchedTask.h"
-
--- a/Renderer/Engine/task/task_init.cc	Sat Dec 05 20:54:12 2009 +0900
+++ b/Renderer/Engine/task/task_init.cc	Sun Dec 06 00:54:10 2009 +0900
@@ -16,7 +16,7 @@
 SchedExternTask(Move);
 SchedExternTask(Draw);
 
-SchedExternTask(Dummy);
+// SchedExternTask(Dummy);
 
 SchedExternTask(ShowTime);
 SchedExternTask(ChainMove);
@@ -48,7 +48,7 @@
     SchedRegister( Move);
     SchedRegister( Draw);
 
-    SchedRegister( Dummy);
+    // SchedRegister( Dummy);
 
     SchedRegister( UpdateKey);
     SchedRegister( InitKey);
--- a/TaskManager/Fifo/FifoTaskManagerImpl.cc	Sat Dec 05 20:54:12 2009 +0900
+++ b/TaskManager/Fifo/FifoTaskManagerImpl.cc	Sun Dec 06 00:54:10 2009 +0900
@@ -62,6 +62,8 @@
 
     mainTaskList = taskListImpl->create();
 
+    schedTaskManager = new SchedTask();
+    schedTaskManager->init(0,0,0,mainScheduler);
 
 }
 
--- a/TaskManager/Makefile.def	Sat Dec 05 20:54:12 2009 +0900
+++ b/TaskManager/Makefile.def	Sun Dec 06 00:54:10 2009 +0900
@@ -32,8 +32,8 @@
 # SIMPLE_TASK=-DSIMPLE_TASK
 SIMPLE_TASK=
 
-# OPT = -O9 
-OPT =  -g
+OPT = -O9 
+# OPT =  -g
 
 CC     = g++   
 CFLAGS = $(SIMPLE_TASK) -Wall `sdl-config --cflags` -m$(ABIBIT)   $(OPT)
--- a/TaskManager/kernel/main.cc	Sat Dec 05 20:54:12 2009 +0900
+++ b/TaskManager/kernel/main.cc	Sun Dec 06 00:54:10 2009 +0900
@@ -10,9 +10,12 @@
 /* User main function */
 extern int TMmain(TaskManager* manager, int argc, char *argv[]);
 
+static int profile = 0;
+
 /* Default TMend function */
 static void
-defaultTMend(TaskManager *manager) {}
+defaultTMend(TaskManager *manager) {
+}
 
 //TaskManager *manager;
 
@@ -35,8 +38,9 @@
     for (int i = 1; argv[i]; ++i) {
         if (strcmp(argv[i], "-cpu") == 0) {
             machineNum = atoi(argv[++i]);
-        }
-        if (strcmp(argv[i], "-help") == 0) {
+        } else if (strcmp(argv[i], "-p") == 0) {
+	    profile = 1;
+        } else if (strcmp(argv[i], "-help") == 0) {
 	    if (usr_help_str) {
 		printf("%s", usr_help_str);
 	    }
@@ -50,6 +54,8 @@
 
     manager->set_TMend(defaultTMend);
 
+    if (profile)
+	manager->start_profile();
     if (TMmain(manager, argc, argv) < 0) {
 	goto FINISH;
     }
@@ -57,10 +63,14 @@
     manager->run();
 
     (manager->tm_end)(manager);
-    manager->run(); // tm_end may create a Task..
+    if (profile)
+	manager->show_profile();
+    manager->run(); // tm_end/show_profile may create a Task..
 
 FINISH:
     delete manager;
 
     return EXIT_SUCCESS;
 }
+
+/* end */
--- a/TaskManager/kernel/schedule/SchedTask.cc	Sat Dec 05 20:54:12 2009 +0900
+++ b/TaskManager/kernel/schedule/SchedTask.cc	Sun Dec 06 00:54:10 2009 +0900
@@ -321,6 +321,11 @@
     scheduler->show_dma_wait();
 }
 
+long
+SchedTask::get_random() {
+    return scheduler->get_random();
+}
+
 void
 SchedTask::start_profile() {
     scheduler->start_profile();
--- a/TaskManager/kernel/schedule/SchedTask.h	Sat Dec 05 20:54:12 2009 +0900
+++ b/TaskManager/kernel/schedule/SchedTask.h	Sun Dec 06 00:54:10 2009 +0900
@@ -117,9 +117,11 @@
     void dma_load(void *buf, memaddr addr, uint32 size, uint32 mask);
     void dma_store(void *buf,memaddr addr, uint32 size, uint32 mask);
     void dma_wait(uint32 mask);
+
     void show_dma_wait();
     void start_profile();
 
+
     /*!
       SPU用の get_input, get_output
      */
@@ -142,6 +144,7 @@
     void set_task_cpu(HTaskPtr, CPU_TYPE);
     void* allocate(int size,int align);
     Scheduler* get_scheduler();
+    long get_random();
 
 
     /* system call */
--- a/TaskManager/kernel/sys_task/SysTasks.h	Sat Dec 05 20:54:12 2009 +0900
+++ b/TaskManager/kernel/sys_task/SysTasks.h	Sun Dec 06 00:54:10 2009 +0900
@@ -2,3 +2,4 @@
 FinishTask,
 ShowTime,
 StartProfile,
+#define Dummy StartTask
--- a/example/many_task/Makefile.def	Sat Dec 05 20:54:12 2009 +0900
+++ b/example/many_task/Makefile.def	Sun Dec 06 00:54:10 2009 +0900
@@ -6,8 +6,10 @@
 
 CERIUM = ../../../Cerium
 
+OPT = -O9
+# OPT = -g
 CC      = g++
-CFLAGS  = -g -Wall -O9
+CFLAGS  =  -Wall  $(OPT)
 
 INCLUDE = -I${CERIUM}/include/TaskManager -I. -I..
 LIBS = -L${CERIUM}/TaskManager
--- a/example/many_task/main.cc	Sat Dec 05 20:54:12 2009 +0900
+++ b/example/many_task/main.cc	Sun Dec 06 00:54:10 2009 +0900
@@ -70,7 +70,11 @@
 
     task_init();
 
-    sort_init(manager, manager->get_cpuNum(), length);
+    HTask *dummy = manager->create_task(Dummy);
+    int cpu  = manager->get_cpuNum();
+    if (cpu==0) cpu = 1;
+    dummy->set_post(sort_init, (void*)cpu, (void*)length);
+    dummy->spawn();
 
     st_time = getTime();
 
@@ -87,3 +91,5 @@
     //show_data();
     printf("Time: %0.6f\n",ed_time-st_time);
 }
+
+/* end */
--- a/example/many_task/sort.cc	Sat Dec 05 20:54:12 2009 +0900
+++ b/example/many_task/sort.cc	Sun Dec 06 00:54:10 2009 +0900
@@ -12,10 +12,9 @@
 static int last_block_num;
 static int half_block_num;
 static int last_half_block_num;
-static TaskManger *manager;
 
 static void sort_restart(SchedTask *, void *, void *);
-static void sort_start();
+static void sort_start(SchedTask *);
 
 /**
  * 一つの block にある data の数が MAX_BLOCK_SIZE 超えないような
@@ -48,22 +47,22 @@
 sort_restart(SchedTask *s, void *d, void *e)
 {
     static int cnt = 0;
+//    static int ccc = 0;
     long max = (long)d;
 
     if (++cnt == max) {	
 	cnt = 0;
-	sort_start();
+// printf("restarted %d\n",ccc++);
+	sort_start(s);
     }
 }
 
 static void
-sort_start()
+sort_start(SchedTask *manager)
 {
     if (--sort_count < 0) {
 	return;
     }
-#ifdef SIMPLE_TASK
-#endif
 
     HTaskPtr fsort[split_num];
 
@@ -114,7 +113,7 @@
 	for (int i = 0; i < half_num; i++) {
 	    bsort[i]->wait_for(fsort[i]);
 	    bsort[i]->wait_for(fsort[i+1]);
-	    bsort[i]->set_post(sort_restart, (void*)(half_num),0);
+	    bsort[i]->set_post(sort_restart, (void*)(half_num),(void*)manager);
 	    bsort[i]->spawn();
 	}
     }
@@ -125,10 +124,10 @@
 }
 
 void
-sort_init(TaskManager *_manager, int cpuNum , int length )
+sort_init(SchedTask *manager, void *a, void *b)
 {
-
-    manager = _manager;
+    int cpuNum = (int)a;
+    int length = (int)b;
 
     data = (DataPtr)manager->allocate(sizeof(Data)*length);
     data_length = length;
@@ -148,7 +147,7 @@
     last_block_num = length - (split_num-1)*block_num;
     last_half_block_num = half_block_num+(last_block_num/2);
 
-    sort_start();
+    sort_start(manager);
 }
 
 /* end */
--- a/example/word_count_test/Makefile.def	Sat Dec 05 20:54:12 2009 +0900
+++ b/example/word_count_test/Makefile.def	Sun Dec 06 00:54:10 2009 +0900
@@ -10,8 +10,8 @@
 # SIMPLE_TASK= -DSIMPLE_TASK
 SIMPLE_TASK= 
 
-# OPT =  -O9
-OPT =  -g
+OPT =  -O9
+# OPT =  -g
 
 CC      = g++
 CFLAGS  =  -Wall $(OPT) $(SIMPLE_TASK)
--- a/example/word_count_test/main.cc	Sat Dec 05 20:54:12 2009 +0900
+++ b/example/word_count_test/main.cc	Sun Dec 06 00:54:10 2009 +0900
@@ -193,10 +193,6 @@
 
     /*各SPEの結果を合計して出力するタスク*/
 
-    if (profile) {
-	manager->start_profile();
-    }
-
 #ifdef SIMPLE_TASK
     t_print = manager->create_task(TASK_PRINT,
 	(memaddr)&w->self,sizeof(memaddr),0,0);
@@ -254,12 +250,6 @@
     return filename;
 }
 
-static void
-myTMend(TaskManager *manager) 
-{
-    if (profile) 
-	manager->show_profile();
-}
 
 int
 TMmain(TaskManager *manager, int argc, char *argv[])
@@ -271,7 +261,6 @@
     if (filename < 0) {
 	return -1;
     }
-    manager->set_TMend(myTMend);
 
     task_init();
     run_start(manager, filename);
--- a/example/word_count_test/spe/Exec.cc	Sat Dec 05 20:54:12 2009 +0900
+++ b/example/word_count_test/spe/Exec.cc	Sun Dec 06 00:54:10 2009 +0900
@@ -26,36 +26,22 @@
     int line_num = 0;
     int i = 0;
     
-    /*文字なら1,スペースか改行なら0*/
     head_tail_flag[0] = (i_data[0] != 0x20) && (i_data[0] != 0x0A);
     word_num -= 1-head_tail_flag[0];
 
     for (; i < length; i++) {
-
-	    //s->printf("[SPE%d]%c",id,i_data[i]);
-
-
 	if (i_data[i] == 0x20) {
-	    //s->printf("スペース\n");
 	    word_flag = 1;
-	}
-
-	else if (i_data[i] == 0x0A) {
-	    //s->printf("改行\n");
+	} else if (i_data[i] == 0x0A) {
 	    line_num += 1;
 	    word_flag = 1;
-	}
-
-	else {
+	} else {
 	    word_num += word_flag;
 	    word_flag = 0;
 	}
-
     }
 
     word_num += word_flag;
-    /*文字なら1,スペースか改行なら0*/
-    //printf("last word %c",i_data[i-1]);
     head_tail_flag[1] = (i_data[i-1] != 0x20) && (i_data[i-1] != 0x0A);
 
     // s->printf("SPE word %d line %d\n",word_num,line_num);