changeset 1420:e8debff40a3d draft

comment
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 20 Feb 2012 03:11:41 +0900
parents 2bf847d6202d
children 3778a1eda68d
files Renderer/Engine/ChangeLog Renderer/Engine/task/AllocateSegment.cc TaskManager/kernel/schedule/Scheduler.cc example/many_task/Makefile.def example/word_count/Makefile.def
diffstat 5 files changed, 38 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/Renderer/Engine/ChangeLog	Mon Feb 20 01:58:44 2012 +0900
+++ b/Renderer/Engine/ChangeLog	Mon Feb 20 03:11:41 2012 +0900
@@ -1,3 +1,28 @@
+2012-2-18  Shinji Kono  <kono@ie.u-ryukyu.ac.jp>
+
+	No copy mode で動くように直しました。
+
+	GLOBAL_TILE_LIST 16384        TEXTURE_BLOCK_SIZE が 8*8 で 256, MAX_TILE 64
+	PolygonPack size 34848        sizeof(PolygonPack)        17424, POLYGONPACK_SEGMENT_NUM 2 (でかすぎる)
+	SpanPack size    20704        sizeof(SpanPack)            5176, SPANPACK_SEGMENT_NUM 4
+	spackList         1024        512*2
+
+	明らかに Polygon Pack が食い過ぎ 256k しかメモリがないのに。 全部で32k or 64k に抑える。
+	MAX_SIZE_TRIANGLE 128  を減らせば良い
+	Texture とは共有させる
+	spackList は計算可能なので配列をコピーする必要はない
+
+	そもそもでかいものに get_segment を使わない。Span (80) あるいは、TrianglePack (136) 数個単位にする。
+	TrianglePack は 128 にしたのに。
+	直後にwaitしないで、交互に書き出し読み出しを行う。(pipeline)
+
+	get_segement のhashが切ってあり、毎回、load してるので意味がない。
+	write back する。dirty flag を付けて、write で flush する。
+
+	DrawSpan のtextureの次のものを早めに読んでおく。
+
+	texture が壊れるバグが残っているようだ。
+
 2012-2-18  Shinji Kono  <kono@ie.u-ryukyu.ac.jp>
 
 	SceneGraphRoot の light ってなんだよ?
--- a/Renderer/Engine/task/AllocateSegment.cc	Mon Feb 20 01:58:44 2012 +0900
+++ b/Renderer/Engine/task/AllocateSegment.cc	Mon Feb 20 03:11:41 2012 +0900
@@ -21,14 +21,15 @@
 {
 
     /* 
-     * texture tile size 32768
-     * PolygonPack size 14384
-     * SpanPack size 3888
+     * GLOBAL_TILE_LIST 16384        TEXTURE_BLOCK_SIZE が 8*8 で 256, MAX_TILE 64
+     * PolygonPack size 34848        sizeof(PolygonPack)        17424, POLYGONPACK_SEGMENT_NUM 2 (でかすぎる)
+     * SpanPack size    20704        sizeof(SpanPack)            5176, SPANPACK_SEGMENT_NUM 4
+     * spackList         1024        512*2
      *
-     * texture tile の size 内でやりくりすれば、問題なく動くのだが、、
-     * 32768 - (14384 * 2) - (3888 * 2) = -3776 、でマイナス。
-     * MAX_TILE を 128 から 64 に落としたら動いた
-     * texture をキャッシュしないなら MAX_TILE は 2 でいい。2つのSegmentを使って、double buffering する感じ。
+     *    明らかに Polygon Pack が食い過ぎ 256k しかメモリがないのに。 全部で32k or 64k に抑える。
+     *    MAX_SIZE_TRIANGLE 128  を減らせば良い
+     *    Texture とは共有させる
+     *    spackList は計算可能なので配列をコピーする必要はない
      */
 
     MemList *ml = smanager->createMemList(sizeof(uint32) * TEXTURE_BLOCK_SIZE, MAX_TILE);
--- a/TaskManager/kernel/schedule/Scheduler.cc	Mon Feb 20 01:58:44 2012 +0900
+++ b/TaskManager/kernel/schedule/Scheduler.cc	Mon Feb 20 03:11:41 2012 +0900
@@ -346,6 +346,7 @@
 
     //addr が空だった場合はどうなるか
     //こうすると単純にFIFOか
+    //  そうじゃなくて、単にbufferを余計に取って毎回DMAしているだけだよね。
 
     MemorySegment *s = m->getLast();
     m->moveToFirst(s);
@@ -480,8 +481,6 @@
 void
 Scheduler::wait_segment(MemorySegment *s)
 {
-    // えーと、dma してない時には、skip しないとだめなんじゃないの?
-
     if (s == NULL) return;
     if (s->tag) connector->dma_wait(s->tag);
     s->tag = 0;
--- a/example/many_task/Makefile.def	Mon Feb 20 01:58:44 2012 +0900
+++ b/example/many_task/Makefile.def	Mon Feb 20 03:11:41 2012 +0900
@@ -6,9 +6,9 @@
 
 CERIUM = ../../../Cerium
 
-# OPT = -O9
+OPT = -O9
 # OPT = -g -O9
-OPT = -g
+# OPT = -g
 CC      = g++
 CFLAGS  =  -DUSE_SIMPLE_TASK -Wall  $(OPT)
 # CFLAGS  =   -Wall  $(OPT)
--- a/example/word_count/Makefile.def	Mon Feb 20 01:58:44 2012 +0900
+++ b/example/word_count/Makefile.def	Mon Feb 20 03:11:41 2012 +0900
@@ -9,8 +9,8 @@
 CERIUM = ../../../Cerium
 
 
-#OPT =  -O9
-OPT =  -g
+OPT =  -O9
+# OPT =  -g
 
 CC      = g++
 CFLAGS  =  -Wall $(OPT)