[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

[MD:880]CCL coding system on Meadow.



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]