[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]
[OSASK 1113] Re: alekto0 OK
こんばんは、川合です。
Mitsunari Shigeo さんは 2000/09/01 17:02:48 の「[OSASK 1112] Re:
alekto0 OK」で書きました:
>写し間違えていました(笑)
>>Athlon 600 : 3004??kc/s
>>PIIIE 450 : 22272?kc/s
>でした。
とても安心しました(笑)。
>> それと一応確認なのですが、これは「cntupc1」の結果ではなくて、
>>「countup1」の結果なのですね?
>名前が多くてどれだか分からなくなりましたが、alekto0に付属のuser.bin
>です。COUNTUP1.BINと同じファイルサイズ1146byteなのでそうだと思います。
わざわざ確認していただいてありがとうございます。ちなみに、サイ
ズで確認する以外にも、ウィンドウタイトルに表示される名前で区別で
きます。・・・が、実行するのは面倒ですね。
>>Athlonの値も1ループ当たり2clocksに低下(K6シリーズとの比較)
>>しているので、少し気になったのです。
>これは仕方がないです。PentiumIII, Athlonはパイプラインがめちゃくちゃ
>深くなっています。したがってこんなに短いループではその性能を出せません。
どうもそのようです。
しかし、本当にループが短いのが直接原因なのかは少し疑問に感じて
います。ループが短くても分岐予測がヒットすれば影響が無いような気
がします。ループが短いことよりも、前の演算結果をすぐに参照しよう
としていることがいけないのかもしれません。・・・しかし、これも僕
の勝手な推測で十分な証拠はありません。
K6が立派だったので過信していました。すみません。
>proc test1
> mov edx,[esp+4]
> mov ecx,[esp+8]
> shr ecx,6
>lp:
> movq mm0,[edx]
> add edx,64
> movq mm1,[edx-56]
> movq mm2,[edx-48]
> paddd mm7,mm2
> psubd mm3,[edx-40]
> paddd mm7,mm3
> movq mm4,[edx-32]
> paddd mm7,mm4
> psubd mm5,[edx-24]
> paddd mm7,mm5
> movq mm6,[edx-16]
> paddd mm7,mm6
> dec ecx
> movq mm7,[edx-8]
> jnz .lp
> emms
> ret
完全に脇道にそれますが、上記のプログラムを以下のようにするとAG
Iによるストールが軽減できそうな気がします。
proc test1
mov ecx,[esp+8]
mov edx,[esp+4]
shr ecx,6
lp:
movq mm0,[edx]
movq mm1,[edx+ 8]
movq mm2,[edx+16]
dec ecx
paddd mm7,mm2
psubd mm3,[edx+24]
paddd mm7,mm3
movq mm4,[edx+32]
paddd mm7,mm4
psubd mm5,[edx+40]
paddd mm7,mm5
movq mm6,[edx+48]
paddd mm7,mm6
movq mm7,[edx+56]
lea edx,[edx+64]
jnz .lp
emms
ret
それにしてもこれを8クロックで処理するなんて、いい時代になりま
したねえ。・・・ん?でも、Pentium MMXでも僕のコードなら9クロック
くらいで回れるかも?(試していないので断言は出来ません)。それで
も、僕はその1クロックの差が偉大だと思います。
それでは。
--
川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.or.jp
Homepage http://www.imasy.or.jp/~kawai/