changeset 433:c28b3f83ca65

overlay (on going)..
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 24 Sep 2009 21:08:37 +0900
parents fb62b7acc92b
children 9a95b60ad5fb
files example/get_segment/Func.h example/get_segment/README example/get_segment/main.cc example/get_segment/spe/Hello.cc example/get_segment/spe/Hello1.cc example/get_segment/spe/Hello1.h example/get_segment/spe/Makefile example/get_segment/spe/ld.script.ed example/get_segment/spe/spe-main.cc
diffstat 9 files changed, 60 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/example/get_segment/Func.h	Thu Sep 24 20:21:29 2009 +0900
+++ b/example/get_segment/Func.h	Thu Sep 24 21:08:37 2009 +0900
@@ -1,5 +1,6 @@
 enum {
     HELLO_TASK,
+    HELLO_TASK1,
     RUN_FINISH,
 };
 
--- a/example/get_segment/README	Thu Sep 24 20:21:29 2009 +0900
+++ b/example/get_segment/README	Thu Sep 24 21:08:37 2009 +0900
@@ -1,20 +1,16 @@
 
 - 概要
 
-SPE側から、PPEのメインメモリをアクセスするために、固定長の
-
-    MemorySegment
+Thu Sep 24 20:58:07 JST 2009
 
-をリストにした MemList を作る。MemHash により、MemorySegment
-を検索出来るようにする。MemorySegement は、MemList 上で、LRU
-で入れ換えられる。これにより、SPE上に、メインメモリのキャッシュ
-を作ることが出来る。
+Overly の例題
+
+get_segment を使うのだが、load のsize がまちまちなので、それを
+別に扱う必要がある。
 
-MemList は、Task が自分で管理する。それは、global_get/global_set
-で、Task を越えて持ち越すことが出来る。ただし、MemList自体
-が削除されてしまう可能性もある。その時には、再度、MemListを
-確保する。
+それから、olvy 領域は一つは取られてしまうので、それを一つ確保
+する必要がある。うんぬん...
 
-キャッシュは、書き出し(put)もサポートしているが、get して、
-get したものが吐き出されてない前提。WriteBack などは実装してない。
+ld.script.ed は、なんらかのプログラムで生成する。
 
+なんか、spe manager だけで100kもあるんだけど。
--- a/example/get_segment/main.cc	Thu Sep 24 20:21:29 2009 +0900
+++ b/example/get_segment/main.cc	Thu Sep 24 21:08:37 2009 +0900
@@ -29,6 +29,7 @@
 hello_init(TaskManager *manager)
 {
     HTask *hello;
+    HTask *hello1;
 
     for (int i = 0; i < count; i++) {
 	/**
@@ -36,6 +37,7 @@
 	 *   create_task(Task ID);
 	 */
 	hello = manager->create_task(HELLO_TASK);
+	hello1 = manager->create_task(HELLO_TASK1);
 
 	/**
 	 * Select CPU
@@ -43,14 +45,17 @@
 	 *   if you do not call this, execute PPE.
 	 */
 	hello->set_cpu(SPE_ANY);
+	hello1->set_cpu(SPE_ANY);
 
 	/**
 	 * Set 32bits parameter
 	 *   add_param(32bit parameter);
 	 */
 	hello->add_param(i);
+	hello1->add_param(i);
 
 	hello->spawn();
+	hello1->spawn();
     }
 }
 
--- a/example/get_segment/spe/Hello.cc	Thu Sep 24 20:21:29 2009 +0900
+++ b/example/get_segment/spe/Hello.cc	Thu Sep 24 21:08:37 2009 +0900
@@ -3,14 +3,14 @@
 #include "Func.h"
 
 /* これは必須 */
-SchedDefineDynamicTask(Hello,Segment1);
+SchedDefineDynamicTask(Hello,segment1);
 
 int
 Hello::run(SchedTask *smanager, void *rbuf, void *wbuf)
 {
     int task_id = get_param(0);
 
-    printf("[%d] Hello, World!!\n", task_id);
+    printf("[%d] Hello, World!! Seg1 \n", task_id);
 
     return 0;
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/get_segment/spe/Hello1.cc	Thu Sep 24 21:08:37 2009 +0900
@@ -0,0 +1,16 @@
+#include <stdio.h>
+#include "Hello1.h"
+#include "Func.h"
+
+/* これは必須 */
+SchedDefineDynamicTask(Hello1,segment2);
+
+int
+Hello1::run(SchedTask *smanager, void *rbuf, void *wbuf)
+{
+    int task_id = get_param(0);
+
+    printf("[%d] Hello, World Seg 2!!\n", task_id);
+
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/get_segment/spe/Hello1.h	Thu Sep 24 21:08:37 2009 +0900
@@ -0,0 +1,15 @@
+#ifndef INCLUDED_TASK_HELLO
+#define INCLUDED_TASK_HELLO
+
+#ifndef INCLUDED_SCHED_TASK
+#  include "SchedTask.h"
+#endif
+
+class Hello1 : public SchedTask {
+public:
+    SchedConstructor(Hello1);
+    
+    int run(SchedTask *smanager, void *r, void *w);
+};
+
+#endif
--- a/example/get_segment/spe/Makefile	Thu Sep 24 20:21:29 2009 +0900
+++ b/example/get_segment/spe/Makefile	Thu Sep 24 21:08:37 2009 +0900
@@ -5,11 +5,11 @@
 SRCS = spe-main.o
 # SRCS = $(filter-out $(SRCS_EXCLUDE),$(SRCS_TMP))
 SPEOBJS = $(SRCS:.cc=.o)
-OVLOBJS = Hello.o   LoadEntry.o 
+OVLOBJS = Hello.o Hello1.o  LoadEntry.o 
 
 CC      = spu-g++
 INCLUDE = -I../${CERIUM}/include/TaskManager -I. -I..
-CFLAGS  = $(INCLUDE) -O9 -g -Wall -fno-exceptions -fno-rtti#-DDEBUG
+CFLAGS  = $(INCLUDE) -O0 -g -Wall -fno-exceptions -fno-rtti#-DDEBUG
 LIBS = -L../${CERIUM}/TaskManager -lspemanager  -Wl,--gc-sections 
 SPELIBS   = -Wl,-T,$(LDSCRIPT) -Wl,-N $(LIBS)
 
@@ -36,5 +36,5 @@
 	$(CC) -o $@ $(SPEOBJS) $(SPELIBS)
 
 clean:
-	rm -f $(TARGET) $(OBJS)
+	rm -f $(TARGET) $(SPEOBJS) $(OVLOBJS)
 	rm -f *~ \#*
--- a/example/get_segment/spe/ld.script.ed	Thu Sep 24 20:21:29 2009 +0900
+++ b/example/get_segment/spe/ld.script.ed	Thu Sep 24 21:08:37 2009 +0900
@@ -1,12 +1,13 @@
 / \.text /
 /\*(\.text/
-s/\*(\.text/*( EXCLUDE_FILE(Hello.o,LoadEntry.o) .text/
+s/\*(\.text/*( EXCLUDE_FILE(Hello.o Hello1.o LoadEntry.o) .text/
 /} =0/
 a
   OVERLAY :
   {
-    .Segment0 { LoadEntry.o(.text) }
-    .Segment1 { Hello.o(.text) }
+    .segment0 { LoadEntry.o(.text) }
+    .segment1 { Hello.o(.text) }
+    .segment2 { Hello1.o(.text) }
   }
 .
 w
--- a/example/get_segment/spe/spe-main.cc	Thu Sep 24 20:21:29 2009 +0900
+++ b/example/get_segment/spe/spe-main.cc	Thu Sep 24 21:08:37 2009 +0900
@@ -2,7 +2,8 @@
 #include "Scheduler.h"
 #include "LoadEntry.h"
 
-SchedExternDynamicTask(Hello,Segment1);
+SchedExternDynamicTask(Hello,segment1);
+SchedExternDynamicTask(Hello1,segment2);
 
 /**
  * この関数は SpeScheduler から呼ばれるので
@@ -11,6 +12,7 @@
 void
 task_init(Scheduler *scheduler)
 {
-    SchedRegisterDynamicTask(HELLO_TASK, Hello, Segment1);
-    scheduler->allocate_code_segment(4,8024);
+    SchedRegisterDynamicTask(HELLO_TASK, Hello, segment1);
+    SchedRegisterDynamicTask(HELLO_TASK1, Hello1, segment2);
+    scheduler->allocate_code_segment(4,1024);
 }