[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 2278] Re: Mandelbrot



  こんにちは、川合です。


MITSUNARI shigeo さんは 2001/10/03 22:38:05 の「[OSASK 2274] Re:
Mandelbrot」で書きました:

>Ctrl併用でやってみました。
>>http://homepage1.nifty.com/herumi/soft/mandel1003.zip

  すでに小柳さんが感想を述べられていますが、僕も全く同意見で、と
ても使いやすくなったように思います。性能や機能についてはもう不満
はありません。これでCPUを選ばなければ川合秀実推奨を付けたいくら
いです。

>ついでに一部のルーチンをasm化しました。
>Athlon/PIII専用(PIIもいけたっけ?)になっちゃいましたけど(^^;
>#CPU判別してもよかったのですが...

  これって、FCOMIP&JNCだけが問題なんですよね?これを、伝統的な

    FCOMP  ST5            FCOMP  ST5
    FSTSW  AX             FSTSW  AX
    SAHF                  TEST   AH,01H
    JNC    .exit          JZ     .exit

のいずれかに置き換えるとそんなに速さが落ちてしまうんでしょうか?
まあ、落ちないわけはないんですが・・・。僕としてはサイズが増える
ことや速度が落ちてしまうことを考慮しても、FPU搭載機種の全てで動
く方がうれしい気がします(一番いいのはおっしゃるとおり、機種判
別するか、2バージョン用意することなのかもしれませんが)。

>最初に書いたら動いたのでその後最適化してないんですがlccよりはずっと
>速いです(というかlcc遅すぎ)。

  これを見てしまうと、全く同感です。僕も2倍くらいの体感速度の違
いがあると思いました。

>VC++やgccだとこの程度は生成してくれると思うのでobj2bim0が対応すると
>いいなあと思ってしまいます。

  おっしゃる通りでしょう(笑)。ところで、gccはWin32上でも走るバ
ージョンがあるんでしょうか?もしあるなら、COFFで出力できるかどう
かに興味があるのですが・・・。

  ところで、アセンブラソースをぼんやり見ていて思ったのですが、せ
っかく指定したアラインが生きていないかもしれません。というのは、

obj2bim0 -fixobj mandela.obj text_align:1 data_align:8 bss_align:8

のところでtext_alignが1になっているからです。16バイトアラインを
なさっているなら、このtext_alignも16にしておいた方がいいと思いま
す。そうでないとこのコードの先頭アドレスが16バイトアラインされる
保証がなくなってしまうので、肝心のループの先頭もアラインされてい
ないかもしれません。

  それと、これは僕だけの感想かもしれませんが、このmandelではfloa
tよりもdoubleの方がいいかもしれません。・・・いや、あまりに快適
にマンデルブロー集合の中を探検できるので、かなりの高倍率にまで引
き上げてしまう事があるんです(以前のバージョンでは重たくて、そこ
まで行く前に飽きてしまったのですが)。そうすると、floatの精度限
界が要因ではないかと思われる現象(ドットが荒くなる)に遭遇します
。アセンブラ版の方を見る限り、計算ループはFPUレジスタだけでやっ
ているようですので、floatでもdoubleでも速度は変わらないように思
います。いかがでしょうか?


  それでは。

--
    川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.org
Homepage http://www.imasy.org/~kawai/