Mercurial > hg > CbC > old > DPP
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Changes Wed Dec 16 15:16:11 2015 +0900 @@ -0,0 +1,254 @@ +Sun Sep 10 08:19:53 JST 2006 + +あれ? cmp_memory1 では、アドレスを識別しているので、(comment とは +反対に...) アドレスが異なるメモリパターンはshare されてないね。 +こまったものだ。 + +copy_memory の呼び出す、memory_lookup を書き換えないとだめだな。 + +state.c/h は、必要ないみたいだな。 + +state 間のpointer を用意した方があとで実行させてみる時には +便利だろう。(実行って言うのかな? これは、なんだろう? trace +generation? ) + +Sun Sep 10 05:09:02 JST 2006 + +1.6MHz 17inch PowerBook Memory 1GB + ++leo+kono time ./tableau 8 > ers; tail ers +./tableau 8 > ers 237.58s user 12.92s system 79% cpu 5:16.63 total +found 3915727 +no more banch 3915727 +All done count 3915727 + memory_header 11747304 + memcmp_count 830530587 + memory_body 1792 + restore_count 82230288 + restore_size 1096403840 + range_count 24 + range_size 320 ++leo+kono time ./tableau 7 > ers; tail ers +./tableau 7 > ers 35.42s user 1.99s system 90% cpu 41.401 total +found 845529 +no more banch 845529 +All done count 845529 + memory_header 2536695 + memcmp_count 114942650 + memory_body 1568 + restore_count 15219540 + restore_size 202927200 + range_count 21 + range_size 280 ++leo+kono time ./tableau 6 > ers; tail ers +./tableau 6 > ers 5.04s user 0.32s system 97% cpu 5.514 total +found 159299 +no more banch 159299 +All done count 159299 + memory_header 477990 + memcmp_count 15198190 + memory_body 1344 + restore_count 2389500 + restore_size 31860000 + range_count 18 + range_size 240 ++leo+kono time ./tableau 5 > ers; tail ers +./tableau 5 > ers 1.04s user 0.08s system 96% cpu 1.154 total +no more banch 38984 +no more banch 38984 +All done count 38984 + memory_header 117030 + memcmp_count 2432088 + memory_body 1120 + restore_count 467820 + restore_size 6237600 + range_count 15 + range_size 200 + +Lite ( tableau on SICStus Prolog ) では、 + +208.57 sec. +1365 states +60 subterms +21075 state transions +renaming,singleton,length limit 5 + +なので、結構、いい値かな。つうか、知っていはいたが、Lite 遅すぎ。 +状態数が多いのは何故だろう? たぶん、code segment のtask のpointer +が細かすぎるのだろう... + +Sun Sep 10 02:45:16 JST 2006 + +Iterator を使えば、tableau 自体もそんなに難しくないか。 + +Sat Sep 9 23:25:42 JST 2006 + +あ、そうか。 + memory の部分木が同じなら、それもshareした方が良い +でも、そのためには、pattern だけでなく、adr/left/right も +含んだ形で share を行わないとダメ。 + +まぁ、とりあえず、全部copyってことで... + +copy_memory を、もっとintelligentにすればいいんだろうな... + +Sat Sep 9 22:15:10 JST 2006 + +range を登録して、そのrangeに対して、state を決める。 +それを look up するわけだけど、 + state, memory range for real address + state, memory range in database (as copy) +と二つあることになる。 + +実際に、code segement を実行して、すべてのmemory rangeを +lookup するのは、実はばかげてる。code segment で memory に +書き込んだときに、どこを書き込んだのか dirty list みたいな +形で持っておくべきでしょうね。 + +単にデータを圧縮するだけでなく、そのあたりを工夫しないと +速度的に厳しい。 + +code segment の実行も、同じパターンの実行だったら、二度は +行わないみたいな工夫が必要だと思う。それは、一種の理論に +なるんだろうけど... + +まぁ、とりあえずは、それはやらないけどさ。 + +memory range は、実際には増減することになる。malloc / free +した時にどうするかは、これからの課題だろう。 + +Sat Sep 9 19:16:10 JST 2006 + +memory_add は、いいんだけど、state DB のlookup で使う状態は、 +どうやって作るんだろう? + +間が開いているので、何やろうとしていたんだか、良くわからん。 + +memory_add は、状態に対して行うべきものなんじゃないの? + +たぶん、memory_add に相当するものは、 + state に対する address range の登録 + memory pattern の検索と登録 +の二種類があるんだと思われる。そのあたりを曖昧に作ってしまった +らしい。 + + +Sun Aug 6 15:23:05 JST 2006 + +tree をbaranceさせないとだめなのは、そうなんだけど、 +tree search routine も code segement で記述した方が +やっぱり良い。 + +main loop を書くのが面倒だが、あと、も少しなはずだが、 +今日中に終る自信はないね。 + +Binary Tree そのものが状態データベースになるわけなので、 +そこに安直なものを使うのはまずい。 + +Sat Aug 5 22:04:00 JST 2006 + +はぁ、だいぶ出来た。 + + MemoryPtr + add_memory(void *ptr,int length, MemoryPtr *parent) + +で、登録していくわけね。 + +test routine を書いていかないと。 + +Sat Aug 5 19:35:56 JST 2006 + +typedef struct memory { + void *adr; + int length; + void *body; + int crc; + struct memory *left,*right; +} Memory, *MemoryPtr; + +body と address をわけて、中身が同じなら、同じものを +さすようにする。ということは、crc でhashしないとだめ。 +crc じゃなくて hash か。 + +content hash で 2分木をつくって、さらに、adr/length pair +で2分木を作ればいいんじゃないか? そうすれば hash はいりません。 +バランスはさせないとまずいけど。 + +Sat Aug 5 17:45:26 JST 2006 + +state と state_db にわけるのか。 + +typedef struct memory { + void *ptr; + int length; + struct memory *next; +} Memory, *MemoryPtr; + +なんだが、binary tree にするべきかどうか。まぁ、するべきな +んだけど、そうすると、形がuniqueでなくなるのがまずい。正規 +形にならないの? まぁ、正規形でなくても、maximum share され +ていれば、文句はないんだけど。 + +大半のルーチンで、変更されるメモリはごく一部なはず。それを +効率的に捕まえるためには、compiler or program 変換で捕まえる +必要があるはず。(OSのサポートとか?) + +同じ形のメリットは同一性の判定の問題だけ。連続した領域とか +の同一性はどうする? MD5? MD5 はだめだな。 + +address が違うだけで、中身が同じ場合は共有するべきだろ? +だとすれば、中身はハッシュするべきだろう。 + +queue とかの場合の対称性は、abstrct()で正規形に変換してから +db に登録すれば良いわけなんだが、そこまでは間に合わないらしい。 +正規形の大半は、制御に影響しない(あるいはランダムに影響する) +データをzero clearすることになるはず。 + +まぁ、何か変だね。もう少し考えると、すっきりしたもの(ordered BDD +を含む)なにかが見つかるだろう。 + + |------| |------| + +という領域ではなくて、 + + |------xxxxxx------| + +という don't care を含むメモリ領域の正規化という問題だってこと? + +BDD は、 + |tfxxxxxfxtxxfffttt| +という文字列の正規化とみなせるわけだから... なんか、どっかで +見た問題だな。 + +Sat Jul 29 18:44:33 JST 2006 + +No compile errors. + +まぁ、走らせるのは簡単なんだが、状態の登録をどうする? + +malloc() した状態の登録をどうする? + +*同じ* pointer というのを識別する必要がある。 id で識別する? + +まぁ、最初は malloc しないでも良い。 + add_state(void *p,int length); +ぐらい。 + +同じ id (つまり、address )は、同じアドレスである必要があるが... +同じ大きさとは限らない。一番大きなものに合わせる? + +malloc を許すと、そもそも、止まるアルゴリズムにならないが... + +malloc() しても、中身の多様性を無視できる場合。 + add_state(void *p,int length, (*abstrct)(void *,int )); + +メモリreferece は、id で抽象化する必要がある。ということは、 +メモリ演算は、抽象化される必要がある。(移動をともなう場合) + +まぁ、とりあえず固定でやるしかないか。 + +つまり、最初のtablue 展開ルーチンに来るまでに、 +add_state は有限固定回起きるという話なわけね。 +しかも順序が固定というわけか。 + +/* epoch */