[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
[MD:880]CCL coding system on Meadow.
- X-ml-count: 880
- Subject: [MD:880]CCL coding system on Meadow.
- From: Tanaka Akira <akr@xxxxxxxxxxx>
- Date: Wed, 26 Aug 1998 10:50:47 +0900
- User-agent: Shoe-gnus/6.8.8 Emacs/20.2 MULE/3.0 (MOMIJINOGA)
In article <u4sv0yagl.fsf@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>,
Miyashita Hisashi(宮下 尚:HIMI) <himi@xxxxxxxxxxxxxxxxxxxxxxxxx> writes:
> もう、かなり最適化されているんですが、
>
> (r4 >8= 0)
> (write r7)
>
> って、結構変ですねぇ。えーと、
> r7ってこうやってつかうんですか? > 半田さん
この演算子(>8)は私もよくわからないままに使っているのですが ccl.c に
#define CCL_RSH8 0x0B /* X = Y >> 8, r[7] = Y & 0xFF */
などという行があったので r4 を 8bit 右シフトする他に, 副作用として r7
に r4 の下位 8ビットをとっておいてくれるのだと思っています。
;; でも write の引数になった時の挙動は理解できない...
> ## こうなるとccl.elにinline assemblerの機能でも入れた方が良い様な気がしてきた。
考えてみたのですが、inline assembler のような機能があるか、ある程度
ccl-compile が賢ければ私が書いた最初の奴も現在のものと同程度の速度が出
るような気がします。
あれは通常の(変な文字にも = にも出会わずに 4バイト読んで 3バイト書き出
す)ループひとまわりにつき基本的には次の 14命令が実行されます。
read-branch r1
r0 = ...
jump to next
read-branch r1
write r0 [...]
r0 = ...
jump to next
read-branch r1
write r0 [...]
r0 = ...
jump to next
read-branch r1
write r0 [...]
repeat
しかし、現在のものもやっぱり次のように 14命令かかります。
read r0 r1 r2 r3
r4 = r0 [...]
r5 = r1 [...]
r4 |= r5
r5 = r2 [...]
r4 |= r5
r5 = r3 [...]
r4 |= r5
if (r4 & ...) -> false
r4 >8= 0
write r7
r4 >8= 0
write r7
write-repeat r4 ; <- ML に流したものだと r4 >8= 0, write-repeat r7
; の2命令になっていた。
にもかかわらず後の方が速いのは, 最初の方には無駄な jump がたくさんはいっ
ているからなのだろう、と思うんですがいかがでしょうか。
ついでにいえば read-branch の各分岐の並び方を自由に制御できるなら最初
の方の奴の最初の jump to next は削除できるので 13命令で済むような気が
します。
;; read-branch をつかいまくったときに欲しくなったのですが, なにもしな
;; い命令(実行時のオーバーヘッドも一切与えない)ってのがあるといいです
;; ね。
In article <uu330wu2a.fsf@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>,
Miyashita Hisashi(宮下 尚:HIMI) <himi@xxxxxxxxxxxxxxxxxxxxxxxxx> writes:
> ああ、これ、CCLにとっては、とても不利なテストです。
> CCLはそのsetupに結構時間を取られるのです。
20.2 だと問題にならないようですが ExCCL の場合ですか?
20.3 だと(マシン自体が速くて条件が違うんですが)たしかに
ccl-execute-on-string に symbol を指定した場合: 5秒ほど
decode-coding-string を使用した場合 : 10秒ほど
ccl-execute-on-string に vector を指定した場合: 15秒ほど
になります。
> encode/decodeをcoding systemを使って一気にやるのが
> 普通ですよね。この場合はcoding systemが直接bufferを
> いじるので、DLよりも有利に働くかもしれません。
なるほど。それはいいですね。
--
[田中 哲][たなか あきら][Tanaka Akira]