comparison Changes @ 0:d4bc23cb728b

Import from CVS (CVS_DB/member/atsuki/cbc/DPP)
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Wed, 16 Dec 2015 15:16:11 +0900
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:d4bc23cb728b
1 Sun Sep 10 08:19:53 JST 2006
2
3 あれ? cmp_memory1 では、アドレスを識別しているので、(comment とは
4 反対に...) アドレスが異なるメモリパターンはshare されてないね。
5 こまったものだ。
6
7 copy_memory の呼び出す、memory_lookup を書き換えないとだめだな。
8
9 state.c/h は、必要ないみたいだな。
10
11 state 間のpointer を用意した方があとで実行させてみる時には
12 便利だろう。(実行って言うのかな? これは、なんだろう? trace
13 generation? )
14
15 Sun Sep 10 05:09:02 JST 2006
16
17 1.6MHz 17inch PowerBook Memory 1GB
18
19 +leo+kono time ./tableau 8 > ers; tail ers
20 ./tableau 8 > ers 237.58s user 12.92s system 79% cpu 5:16.63 total
21 found 3915727
22 no more banch 3915727
23 All done count 3915727
24 memory_header 11747304
25 memcmp_count 830530587
26 memory_body 1792
27 restore_count 82230288
28 restore_size 1096403840
29 range_count 24
30 range_size 320
31 +leo+kono time ./tableau 7 > ers; tail ers
32 ./tableau 7 > ers 35.42s user 1.99s system 90% cpu 41.401 total
33 found 845529
34 no more banch 845529
35 All done count 845529
36 memory_header 2536695
37 memcmp_count 114942650
38 memory_body 1568
39 restore_count 15219540
40 restore_size 202927200
41 range_count 21
42 range_size 280
43 +leo+kono time ./tableau 6 > ers; tail ers
44 ./tableau 6 > ers 5.04s user 0.32s system 97% cpu 5.514 total
45 found 159299
46 no more banch 159299
47 All done count 159299
48 memory_header 477990
49 memcmp_count 15198190
50 memory_body 1344
51 restore_count 2389500
52 restore_size 31860000
53 range_count 18
54 range_size 240
55 +leo+kono time ./tableau 5 > ers; tail ers
56 ./tableau 5 > ers 1.04s user 0.08s system 96% cpu 1.154 total
57 no more banch 38984
58 no more banch 38984
59 All done count 38984
60 memory_header 117030
61 memcmp_count 2432088
62 memory_body 1120
63 restore_count 467820
64 restore_size 6237600
65 range_count 15
66 range_size 200
67
68 Lite ( tableau on SICStus Prolog ) では、
69
70 208.57 sec.
71 1365 states
72 60 subterms
73 21075 state transions
74 renaming,singleton,length limit 5
75
76 なので、結構、いい値かな。つうか、知っていはいたが、Lite 遅すぎ。
77 状態数が多いのは何故だろう? たぶん、code segment のtask のpointer
78 が細かすぎるのだろう...
79
80 Sun Sep 10 02:45:16 JST 2006
81
82 Iterator を使えば、tableau 自体もそんなに難しくないか。
83
84 Sat Sep 9 23:25:42 JST 2006
85
86 あ、そうか。
87 memory の部分木が同じなら、それもshareした方が良い
88 でも、そのためには、pattern だけでなく、adr/left/right も
89 含んだ形で share を行わないとダメ。
90
91 まぁ、とりあえず、全部copyってことで...
92
93 copy_memory を、もっとintelligentにすればいいんだろうな...
94
95 Sat Sep 9 22:15:10 JST 2006
96
97 range を登録して、そのrangeに対して、state を決める。
98 それを look up するわけだけど、
99 state, memory range for real address
100 state, memory range in database (as copy)
101 と二つあることになる。
102
103 実際に、code segement を実行して、すべてのmemory rangeを
104 lookup するのは、実はばかげてる。code segment で memory に
105 書き込んだときに、どこを書き込んだのか dirty list みたいな
106 形で持っておくべきでしょうね。
107
108 単にデータを圧縮するだけでなく、そのあたりを工夫しないと
109 速度的に厳しい。
110
111 code segment の実行も、同じパターンの実行だったら、二度は
112 行わないみたいな工夫が必要だと思う。それは、一種の理論に
113 なるんだろうけど...
114
115 まぁ、とりあえずは、それはやらないけどさ。
116
117 memory range は、実際には増減することになる。malloc / free
118 した時にどうするかは、これからの課題だろう。
119
120 Sat Sep 9 19:16:10 JST 2006
121
122 memory_add は、いいんだけど、state DB のlookup で使う状態は、
123 どうやって作るんだろう?
124
125 間が開いているので、何やろうとしていたんだか、良くわからん。
126
127 memory_add は、状態に対して行うべきものなんじゃないの?
128
129 たぶん、memory_add に相当するものは、
130 state に対する address range の登録
131 memory pattern の検索と登録
132 の二種類があるんだと思われる。そのあたりを曖昧に作ってしまった
133 らしい。
134
135
136 Sun Aug 6 15:23:05 JST 2006
137
138 tree をbaranceさせないとだめなのは、そうなんだけど、
139 tree search routine も code segement で記述した方が
140 やっぱり良い。
141
142 main loop を書くのが面倒だが、あと、も少しなはずだが、
143 今日中に終る自信はないね。
144
145 Binary Tree そのものが状態データベースになるわけなので、
146 そこに安直なものを使うのはまずい。
147
148 Sat Aug 5 22:04:00 JST 2006
149
150 はぁ、だいぶ出来た。
151
152 MemoryPtr
153 add_memory(void *ptr,int length, MemoryPtr *parent)
154
155 で、登録していくわけね。
156
157 test routine を書いていかないと。
158
159 Sat Aug 5 19:35:56 JST 2006
160
161 typedef struct memory {
162 void *adr;
163 int length;
164 void *body;
165 int crc;
166 struct memory *left,*right;
167 } Memory, *MemoryPtr;
168
169 body と address をわけて、中身が同じなら、同じものを
170 さすようにする。ということは、crc でhashしないとだめ。
171 crc じゃなくて hash か。
172
173 content hash で 2分木をつくって、さらに、adr/length pair
174 で2分木を作ればいいんじゃないか? そうすれば hash はいりません。
175 バランスはさせないとまずいけど。
176
177 Sat Aug 5 17:45:26 JST 2006
178
179 state と state_db にわけるのか。
180
181 typedef struct memory {
182 void *ptr;
183 int length;
184 struct memory *next;
185 } Memory, *MemoryPtr;
186
187 なんだが、binary tree にするべきかどうか。まぁ、するべきな
188 んだけど、そうすると、形がuniqueでなくなるのがまずい。正規
189 形にならないの? まぁ、正規形でなくても、maximum share され
190 ていれば、文句はないんだけど。
191
192 大半のルーチンで、変更されるメモリはごく一部なはず。それを
193 効率的に捕まえるためには、compiler or program 変換で捕まえる
194 必要があるはず。(OSのサポートとか?)
195
196 同じ形のメリットは同一性の判定の問題だけ。連続した領域とか
197 の同一性はどうする? MD5? MD5 はだめだな。
198
199 address が違うだけで、中身が同じ場合は共有するべきだろ?
200 だとすれば、中身はハッシュするべきだろう。
201
202 queue とかの場合の対称性は、abstrct()で正規形に変換してから
203 db に登録すれば良いわけなんだが、そこまでは間に合わないらしい。
204 正規形の大半は、制御に影響しない(あるいはランダムに影響する)
205 データをzero clearすることになるはず。
206
207 まぁ、何か変だね。もう少し考えると、すっきりしたもの(ordered BDD
208 を含む)なにかが見つかるだろう。
209
210 |------| |------|
211
212 という領域ではなくて、
213
214 |------xxxxxx------|
215
216 という don't care を含むメモリ領域の正規化という問題だってこと?
217
218 BDD は、
219 |tfxxxxxfxtxxfffttt|
220 という文字列の正規化とみなせるわけだから... なんか、どっかで
221 見た問題だな。
222
223 Sat Jul 29 18:44:33 JST 2006
224
225 No compile errors.
226
227 まぁ、走らせるのは簡単なんだが、状態の登録をどうする?
228
229 malloc() した状態の登録をどうする?
230
231 *同じ* pointer というのを識別する必要がある。 id で識別する?
232
233 まぁ、最初は malloc しないでも良い。
234 add_state(void *p,int length);
235 ぐらい。
236
237 同じ id (つまり、address )は、同じアドレスである必要があるが...
238 同じ大きさとは限らない。一番大きなものに合わせる?
239
240 malloc を許すと、そもそも、止まるアルゴリズムにならないが...
241
242 malloc() しても、中身の多様性を無視できる場合。
243 add_state(void *p,int length, (*abstrct)(void *,int ));
244
245 メモリreferece は、id で抽象化する必要がある。ということは、
246 メモリ演算は、抽象化される必要がある。(移動をともなう場合)
247
248 まぁ、とりあえず固定でやるしかないか。
249
250 つまり、最初のtablue 展開ルーチンに来るまでに、
251 add_state は有限固定回起きるという話なわけね。
252 しかも順序が固定というわけか。
253
254 /* epoch */