yarv-dev:1147
From: "miura" <m-72 tf6.so-net.ne.jp>
Date: Sat, 24 Nov 2007 12:56:26 +0900
Subject: [yarv-dev:1147] Re: 考えている案
三浦です
単精度の浮動小数点をRVALUEに埋め込むpoor man's versionを作り
始めました。
今のところp 1.0 + 1.0をすると2.0と表示されます。それ以上難しいことす
るとうまく動きません。
作っていって気が付いたのですが、正式な高速化開発に当たって次の
ような問題があるんじゃないかなと思います。
Float関係のテストパターンがいっぱい欲しい
開発していて、Floatのテストパターンがいっぱいいるなと思いました。
ある値だとうまくいくけど、別の値だとだめになるというのが良くあります。
テストパターンのランダム生成も検討した方がいいかもしれないです。
poor man's versionを作ったときのテストパターンも積極的に公開したい
と思います。
Floatの標準ベンチマークが欲しい
せっかく高速化しても自作のベンチマークだけで効果が出ても悲しい
ので標準ベンチマークが欲しいなと思いました。そのベンチマークの候補と
して大域環境光レンダラのminilight(http://www.hxa7241.org/minilight/minilight.html)
を推したいと思います。
ただ、多分このプログラムは精度が要求されないと思う(確かめていない
ですけど)ので、精度が要求されるプログラムなんかもあるといいのでは
ないかなと思いますが、その手の話は全然分からないです。
実装の詳細
(3)の指数部を削る方式で、fixnumに泣いてもらってfixnumの領域に押し込
むようにしました。fixnumは30bitを越えるとbignumになってしまいます。
フォーマットは
xxxxxxxxxxxxxxxxxxxxxxxxxxxx11 FIXNUM
xxxxxxxxxxxxxxxxxxxxxxxxxxxx01 FIXFLOAT
となります。FIXFLOATは矛盾に満ちた名前なのですが、個人的に
しっくり来るので使っています。何かいい名前があったら教えて
ください。
後は、ほとんどのFLOATはRFLAOT(var)->valueでアクセスしている様ですが、
これをRFLOAT_VALUE(var)で置き換えます。RFLOAT_VALUE(var)は次のような
定義です。
#define RFLOAT_VALUE(obj) \
((FIXFLOAT_P(obj)) ? rb_value2float(obj) : (RFLOAT(obj)->value))
後は、insns.defなどをFIXFLOATの分岐を追加したりしています。
GCとかmarshalとか問題になりそうですが、まだ何も考えていません。
----- Original Message -----
From: "SASADA Koichi" <ko1 atdot.net>
To: <yarv-dev quickml.atdot.net>
Sent: Tuesday, November 20, 2007 7:08 PM
Subject: [yarv-dev:1122] 考えている案
> ささだです.
>
> Float の高速化ですが,いくつか案があり,それぞれ得失があります.
> で,とりあえず 64bit 前提に考えています.
>
> 高速化は,主に Float の「埋め込み」によって行おうと考えています.
> 要するに,Fixnum と Bignum の関係です.Fixnum はヒープ上にメモリをア
> ロケートしていません.Float はヒープ上にメモリをアロケートしているの
> で,たくさん数値計算をすると GC が発生します.
>
>
> (1) 単精度にする
>
> 一番安易な解決方法です.64bit CPU なら 32 bit まるまる使っても安心.
>
> (2) 1bit,精度を犠牲にする
>
> 一番現実的かな,と思っています.数値計算にどれくらい影響を与える
> か,わかりません.この辺の評価ってどうすればいいんでしょうか.
>
> (3) 頑張って精度を保証する
>
> IEEE754 の規格に則って,exp をやりくりして,1 bit 〜 3 bit 捻出す
> る方法です.細々とした計算が必要になるため,オーバヘッドは大きいです
> が,精度が保証できるため難しい検証やらは不要です(今まで通り,で終わ
> り).
>
>
> 例えば,(2) ってどれくらい「やばい」んでしょうか.
>
> --
> // SASADA Koichi at atdot dot net
>
> --
> ML: yarv-dev quickml.atdot.net
> Info: http://www.atdot.net/~ko1/quickml
--
ML: yarv-dev quickml.atdot.net
Info: http://www.atdot.net/~ko1/quickml
1122 2007-11-20 19:08 [ko1 atdot.net ] 考えている案 1123 2007-11-20 19:25 ┣[horinout rish.kyoto-] 1124 2007-11-20 19:33 ┃┣[ko1 atdot.net ] 1127 2007-11-20 19:52 ┃┣[horinout rish.kyoto-] 1129 2007-11-20 20:05 ┃┃┗[ko1 atdot.net ] 1130 2007-11-20 20:21 ┃┃ ┗[horinout rish.kyoto-] 1131 2007-11-20 20:24 ┃┃ ┗[ko1 atdot.net ] 1132 2007-11-20 20:32 ┃┗[2008 shudo.net ] 1133 2007-11-20 20:53 ┃ ┗[horinout rish.kyoto-] 1137 2007-11-20 21:15 ┃ ┗[2008 shudo.net ] 1125 2007-11-20 19:39 ┣[m-72 tf6.so-net.ne.j] 1126 2007-11-20 19:46 ┃┗[ko1 atdot.net ] 1128 2007-11-20 19:58 ┃ ┣[m-72 tf6.so-net.ne.j] 1135 2007-11-20 20:59 ┃ ┗[m-72 tf6.so-net.ne.j] 1145 2007-11-21 19:44 ┃ ┗[ko1 atdot.net ] 1146 2007-11-21 20:34 ┃ ┗[m-72 tf6.so-net.ne.j] 1134 2007-11-20 20:54 ┣[2008 shudo.net ] 1144 2007-11-21 08:39 ┃┗[ko1 atdot.net ] 1140 2007-11-21 03:52 ┣[t_nissie yahoo.co.jp] 富豪的 VALUE 型( Re: 考えている案) 1141 2007-11-21 04:57 ┃┗[ko1 atdot.net ] 1142 2007-11-21 05:29 ┃ ┗[t_nissie yahoo.co.jp] 1143 2007-11-21 06:02 ┃ ┗[ko1 atdot.net ] -> 1147 2007-11-24 12:56 ┗[m-72 tf6.so-net.ne.j] 1148 2007-11-24 13:10 ┣[ko1 atdot.net ] 1152 2007-11-25 08:51 ┃┗[m-72 tf6.so-net.ne.j] 1149 2007-11-24 13:18 ┣[ko1 atdot.net ] 1150 2007-11-24 13:21 ┗[ko1 atdot.net ] 1151 2007-11-24 13:39 ┗[m-72 tf6.so-net.ne.j]