もきもき3D

アクセスカウンタ

zoom RSS 続:floatとdoubleと最適化

<<   作成日時 : 2008/03/04 07:52   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

http://fault0d.at.webry.info/200711/article_14.htmlの続き。
まぁ最適化ってのは偽り看板だけど(;・з・)

コンパイルオプションに-D__MSVCRT__ -D__MSVCRT_VERSION__=0x0700とした。
VERSIONを8にすると標準ヘッダ内でエラー吐くから7(;・з・)
リンカに-specs=〜として-lmsvcrtを-lmsvcrt80に変更したspecを与えた。
msvcrt.dllでなくmsvcr80.dllだけをインポートしてるのを確認。
VERSIONと食い違うけどキニシナーイ(・ε・ 三 ・з・)

1) -mfpmath=sseが無いとfloatとdoubleが同値になった。
2) -mfpmath=sse無しで-msseNがある場合、P4ではfloatはdoubleが同値、athlon64の場合はfloatはdoubleの近似値になる。但し32bit(24bit)はP4/Ath共に同値。

 __controlfp()がちゃんと効いた。 オプションのおかげかは謎。
 まぁ単に前回の評価方法に問題があって気付かなかっただけぽいけど(;;・з・)
 (2)は_controlfpによる精度変更の影響受けた上でのもの。

 速度的には-mfpmathは欠かせない感じ。
 で、-mfpmathを付けて80bit(64bit)の値が欲しいなら-msseまで。
 -msse2を付けると_controlfpで64bit精度にしていても得られる値は64bit(53bit)になる(語弊があるけど、SSEの演算器のbit数に依存する以上当然?)
 sseとsse2ではそこそこ速度差があるし、doubleは64bit(53bit)の値だってのが揺るぎない前提だろうから、結局は-mfpmath=sse -mmmx -msse -msse2にしとくのが無難ってとこか。

 目的はLWのPlugin作成程度だし(・з・)
 でもLW内は処理に一貫性がないせいでfloatとdoubleがグチャグチャに混ざってるんだよなぁ('A`)
 そっちの実動作を追う方が大変('A`)
 どの段階、どの手段(API)で値を取るかで型や精度や値が違うってのはどうなのよ(゚д゚)

----
とりあえず精度関係はここを見て納得。
http://www.cqpub.co.jp/interface/column/freesoft/default.htm
現行minGWに適したまとまった日本語ドキュメントが欲しいなぁ('A`)

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
続:floatとdoubleと最適化 もきもき3D/BIGLOBEウェブリブログ
文字サイズ:       閉じる