気が向いたら創作活動とかしてる人のチラシの裏。
| ホーム |
2008.02.28 Thu
数学ライブラリも拡張した!ということで本日はDoJaのTransformクラスを自作してました。数日前からつんさんと話してまして、私が行列ほとんどわからないってことで作成を依頼していました。依頼したとは言え何もしないわけにはいかないので、行列の演算について少しばかり勉強しました;すでに昨日の時点でクラスをいただいていたので本日かなりの最適化を施して速度差を計測したんですよ。
乗算命令で速度を測るとだいたい1.2倍から1.4倍速い!なかなか☆と思ったのもつかの間;速かったのは乗算命令ではなくset( float[] )という内部行列への設定命令でした(^_^;)この部分を計測時間から取り除くと0.8倍速くらい・・・。遅くなってる。゚(゚´Д`゚)゚。
いろいろと試してみたところ、DoJaのmultiplyやsetIdentityは異常に速い;内部でfloatをintに変換して計算しているらしいようですが、それだけではsetIdentityが速い点が腑に落ちない。自作のTransformは内部計算も精度を上げるということでfloatのまま計算しています。ここをintに変換すればあるいは超えられるかもしれないです・・・>乗算のみですが;
せっかく頑張って作った高速sqrt( float )やsin( float )もこの状態では活躍の場がない・・・orzどうしたものか。
今考えている方針は2つある。どちらにしても数学ライブラリの拡張は無に帰す可能性はあるのだが、
①自作TransformクラスにDoJa Transformを継承させ、遅いメソッドのみオーバーロードして使う。
②自作Transformクラスの演算を完全に固定小数intに置き換えてしまう(オプション時代のようなのにする)
今から①を試してみて芳しくない場合は②をやってみる。それでもダメなら・・・諦める!のか?
[追記]
煮詰まった;頭がぼぉーっとする(´Д⊂ヽいや酔ってるわけじゃないですよ?(少しだけ柚子酒を割って飲みましたが;)こういうときは別のことに切り替えるべきだろうなぁ。
しかしながら、昨日くらいにふと思いついたことが実現できるならここまで高速化を目指す必要性は少なくなる。今のところ頭の中にストックされているやってみたいことが、この高速化を含め3つになっているので早い段階で消化してしまいたい(´ε`;)
いろいろと試してみたところ、DoJaのmultiplyやsetIdentityは異常に速い;内部でfloatをintに変換して計算しているらしいようですが、それだけではsetIdentityが速い点が腑に落ちない。自作のTransformは内部計算も精度を上げるということでfloatのまま計算しています。ここをintに変換すればあるいは超えられるかもしれないです・・・>乗算のみですが;
せっかく頑張って作った高速sqrt( float )やsin( float )もこの状態では活躍の場がない・・・orzどうしたものか。
今考えている方針は2つある。どちらにしても数学ライブラリの拡張は無に帰す可能性はあるのだが、
①自作TransformクラスにDoJa Transformを継承させ、遅いメソッドのみオーバーロードして使う。
②自作Transformクラスの演算を完全に固定小数intに置き換えてしまう(オプション時代のようなのにする)
今から①を試してみて芳しくない場合は②をやってみる。それでもダメなら・・・諦める!のか?
[追記]
煮詰まった;頭がぼぉーっとする(´Д⊂ヽいや酔ってるわけじゃないですよ?(少しだけ柚子酒を割って飲みましたが;)こういうときは別のことに切り替えるべきだろうなぁ。
しかしながら、昨日くらいにふと思いついたことが実現できるならここまで高速化を目指す必要性は少なくなる。今のところ頭の中にストックされているやってみたいことが、この高速化を含め3つになっているので早い段階で消化してしまいたい(´ε`;)
| ホーム |

→ http://niffy67.blog110.fc2.com/tb.php/93-dee6b76e