【6800Ultra】 nVIDIA厨 vs ATi厨 Part5 【X800XT】
日常的にシェーダを書く立場にいる者です。
最近、各所で精度に関するいい加減な憶測が出回っているようです。
本来こういった知識は開発に関わる人間が理解していれば問題無いことで、
シェーダを扱う人が誤解しなければ良いと思って傍観していました。
ただ、こういった BBS での発言ですと、
一般ユーザの方に誤った知識を植えつけかねないと感じましたので、
一応指摘させていただくことにしました。
#プログラマでない方には判りにくい部分もありますし
>32bitデータのときには必要な部分を切り捨ててチート。
PixelShader 2.0/3.0 のマイクロソフトの要求仕様としては、
部分精度オプション(_pp)未使用時(つまり高精度演算時)の
内部演算精度は少なくとも fp24(s16e7) 以上となっています。
また、部分精度オプション指定時の内部演算精度は
少なくとも fp16(s10e5) 以上となっています。
つまり、仕様上のピクセルシェーダの内部演算精度は、
fp24 で良いということになります。
#実際、ゲーム用途で fp24 で問題になる事はまずありません
また、シェーダ内では、部分精度(_pp)オプションを指定することで
低精度演算を許可することができますが、これはあくまでヒント指定であり、
決して fp16 を強制するものではありません。
つまり、シェーダを書く人間が
「最悪 fp16 の精度があれば許容できるから、出来るだけ速い演算にしてくれ」
と要求したい場合に、ハードウェアに低精度演算の許可を与えるもので、
fp24/fp32 などのより高い精度でも充分高速に演算を行えるのであれば、
それに越した事はありません。
「部分精度を付けたのに fp24 以上で計算された。意図しない動作だ。」
などと頓珍漢な発言をするプログラマはいません。
#単に「演算精度よりは速度を重視して欲しい」というだけのことです。
> 16bitデータのときには不要な部分を追加してチート
> チートしても16bitなら16bit出力。
> 描画は開発者の意図したとおりにならない大チート。
というのも、情報工学の基礎を理解していればあり得ない発言です。
ここでは詳しい説明は避けますが、fp16 演算を多く繰り返せば繰り返す程、
誤差の蓄積により精度が fp16 よりも悪くなってゆくのは常識です。
したがって、たとえ外部精度(ピクセルバッファフォーマット)が全て fp16 としても、
内部演算精度が高い方が最終的な出力の精度も高くなります。
#プログラマが低精度演算を許可している場合、
#プログラマ側としてはそういった演算誤差の蓄積も許容しているということです
まぁ他にも、そもそも fp16 演算自体チートでも何でもありませんし、
チートという言葉自体おかしな使われ方をしていたりしますが、
敢えて指摘する程でも無いと思いますので、これ以上は触れないことにします。
PixelShader のマイクロソフトの要求仕様については、以下をご参照ください。
http://spin.s2c.ne.jp/quick003.html ↑のページ内を「精度に関する要求仕様」で検索
もしくはその情報ソースとなっているメーリングリストでの発言元
http://discuss.microsoft.com/SCRIPTS/WA-MSD.EXE?A2=ind0302b&L=directxdev&D=1&F=&S=&P=13774
PixelShader 2.0と3.0も見た目や出来る事は変わらない
225 :
Socket774:04/05/11 00:33 ID:+H6kZirf
長々と書き込んですみませんでした。
PixelShader 特にDirectX9での仕様について、
nVIDIAファンの方の誤解(?)が多い様なので書かせていただきました。
また繰り返し制限についても、2.0c(b)の重さでさえ
実際のアプリで使いこなすのには数年かかると思います。
あと3Dcは職場の人間が喜んでました、
もし可能ならばDirectX10で規格に盛り込んで欲しいですね。
つまりNvidiaファンは愚か者が多いと仰られている
チートしても負けてるってのは
おそらくnVidiaの壮大なジョークではないのか?
いや6800自体ジョークかもしれない
負けてるからこそせめてチートでなんとかせにゃならん。
>>222 巛彡彡ミミミミミ彡彡
巛巛巛巛巛巛巛彡彡
r、r.r 、|::::: |
r |_,|_,|_,||:::::: ⌒ ⌒|
|_,|_,|_,|/⌒ -="- (-="
|_,|_,|_人そ(^i '"" ) ・ ・)""ヽ フムフム、なるほどね・・・
| ) ヽノ |. ┃`ー-ニ-イ`┃
| `".`´ ノ ┃ ⌒ ┃|
人 入_ノ´ ┃ ┃ノ\
/ \_/\\ ┗━━┛/ \\
/ \ ト ───イ/ ヽヽ
巛彡彡ミミミミミ彡彡
巛巛巛巛巛巛巛彡彡
r、r.r 、|::::: |
r |_,|_,|_,||:::::: /' '\ |
|_,|_,|_,|/⌒ (・ ) (・ )|
|_,|_,|_人そ(^i ⌒ ) ・・)'⌒ヽ ・・・で?
| ) ヽノ |. ┏━━━┓|
| `".`´ ノ ┃ ノ ̄i ┃|
人 入_ノ´ ┃ヽニニノ┃ノ\
/ \_/\\ ┗━━┛/|\\
/ \ ト ───イ/ ヽヽ
232 :
Socket774:04/05/11 02:18 ID:fp18FhVB
ラデ予約すました。
9800だの5900だのと低レベルな糞カード同士で罵倒し合ってんじゃねえよ。
>225
>nVIDIAファンの方の誤解(?)
誤解ももちろん有るだろうが、
意図的な嘘や曲解の方が多い気がする。
>>225 真面目なご意見どうもです。
ですが、本気でチートと騒いでいるのは只のキチガイ一人だけなので
あまり真剣に書き込んでも意味無いかと思われます。
この後貴方へキチガイが深いなレスをする可能性がありますが、
まあ、生暖かい目でスルーしてやってください。
>>236 訂正。一人だけかと思ったら他にもキチガイはっけん。
そもそも、何の話なのか解っているのかと…。
データ形式と、演算精度の意味の違いは解っているのかと…。
>>237 無理に解釈しようとしても、ちょっと苦しい気がするよ。
>その演算精度はATI RADEON9500以上と同じで,DirectX 9-Direct3D(以下D3D9)の正式なFP形式としては存在しない24ビット精度を採用。
ライター自身が、フォーマットと演算精度を混同して書いてるとしか思えない文だし。
一応職業ライターだし、ここでうだうだいってる人間よりは説得力あると感じる人も多いだろうね。
へぇそうなんだ記事も鵜呑みにできないもんだな〜。その演算精度はATI RADEON9500以上と同じで,DirectX 9-Direct3D(以下D3D9)の正式なFP形式としては存在しない24ビット精度を採用
って書いてあったからね。今後ゼンジーの記事は客観的にみて真に受けないことにするよTHX!。
まあじゃあ俺の書いたのは気にしないでってことでスマソ
>>239 いや、だから俺の記事よりもよっぽど西川の方が説得力もあるだろ?
好きに信じていいって、それでこれからも末永くラデ厨のお相手お願いしますよ。
241 :
Socket774:04/05/11 05:16 ID:84m+YJ77
ラデ厨のよくある勘違い
「DX9世代になるとそれ以前のものは 100% 使われなくなる いや使ってはならない そうあってほしい」
242 :
Socket774:04/05/11 05:24 ID:84m+YJ77
ラデ厨の勘違いPart2
「24bitはチートじゃない」
・勝手にDX9の定義するデータタイプを内部演算の精度と勘違い
・DX9には「個々のプログラマの都合、またはどう思うか」は もちろん 定義されていないが
自分勝手な思い込みで浮動小数点精度を語る
まあこんな素人がシェーダなど書けるはずもありませんね。
「データタイプの如何がどうかと話しているのに いきなり自分の都合を語りだす」
など、頓珍漢な発言をするプログラマはいません。
243 :
Socket774:04/05/11 05:31 ID:84m+YJ77
>ここでは詳しい説明は避けますが、fp16 演算を多く繰り返せば繰り返す程、
>誤差の蓄積により精度が fp16 よりも悪くなってゆくのは常識です。
というのも、情報工学の基礎を理解していればあり得ない発言です。
ここでは詳しい説明は避けますが、fp16 演算を繰り返しても
依然としてfp16であることには変わりがないのは常識です。
ラデ厨特有の「思い違った」のか「元データが減衰するかどうか」などは論じられていません。
また、
>たとえ内部演算精度が高い方が最終的な出力の精度も高くなります。
とあるが、fp16を内部でfp24演算するチートをしようとしても
「fp16をfp24にチート」というのはfp16データを正確に24精度まで引き上げるということではなく
「意味のあるfp16をチートGPUに合うように」無駄な部分を追加し24へ上げるわけで、
プログラム的に意味のあるところは16データまで。
決して「勝手にプログラム(設計図)以上の精度データを作り上げる」わけじゃないということ。
文字通りのチートでしかない。
まぁ他にも、そもそも fp16 演算自体チートでも何でもありませんし、
チートという言葉自体おかしな使われ方をしていたりしますが、
敢えて指摘する程でも無いと思いますので、これ以上は触れないことにします。
PixelShader のマイクロソフトの要求仕様については、以下をご参照ください。
http://spin.s2c.ne.jp/quick003.html ↑のページ内を「精度に関する要求仕様」で検索
もしくはその情報ソースとなっているメーリングリストでの発言元
http://discuss.microsoft.com/SCRIPTS/WA-MSD.EXE?A2=ind0302b&L=directxdev&
>>242 おー、来た来たおはようさん。
>・勝手にDX9の定義するデータタイプを内部演算の精度と勘違い
これはゲフォ厨、と言うかあんたと他役一名。
データタイプ(16bit/32bit)と演算精度は違うと言う話を
何度も何度も何度も何度も何度も何度もしているの。
演算精度も16bitと32bitしかないと言う大法螺は
まさに「データタイプを演算精度と勘違い」から来ている。
>「データタイプの如何がどうかと話しているのに いきなり自分の都合を語りだす」
自己紹介ご苦労様。君自身が
「演算精度の話をしているのに いきなりデータタイプを持ち出したりして話をカオスへと導いている」
という理解でよろしいか?
245 :
Socket774:04/05/11 05:39 ID:84m+YJ77
>>244 おー、来た来たおはようさん。
>・勝手にDX9の定義するデータタイプを内部演算の精度と勘違い
これはラデ厨、と言うかあんたと他役一名。
データタイプ(16bit/32bit)と演算精度は違うと言う話を
何度も何度も何度も何度も何度も何度もしているの。
「勝手に誰も話してない演算精度うんぬんの話をするな」と言う話なの。
演算精度も「16bitではいけない」と言う大法螺は
まさに「データタイプを演算精度と勘違い」から来ている。
>「演算精度の話をしているのに いきなりデータタイプを持ち出したりして話をカオスへと導いている」
自己紹介ご苦労。君自身が
「データタイプの話をしているのに いきなり演算精度を持ち出したりして話をカオスへと導いている」
「fp16データはどうあがいてもGPUで勝手に精度を引き上げられないの話をしているのに
いきなり演算制度を持ち出したりして話をカオスへと導いている」
という理解でよろしいか?
ちなみに、ラデ様はデータタイプFP16にもFP32にも対応しているの。
もちろん、データタイプFP24は(ハード的に対応してるかもしれないけど)利用できない。
ただ、その際の演算精度が24bitであると言うだけ。
あくまでラデ様の実装において、データタイプと演算精度は別物であって、
>・勝手にDX9の定義するデータタイプを内部演算の精度と勘違い
こんな勘違いが出てこようはずも無いの。
何度も言うけど、勘違いしているのはあんた(と他約一名)。
>>245 >「勝手に誰も話してない演算精度うんぬんの話をするな」と言う話なの。
はいはい、そりゃ悪かった。
で?データタイプの話でしたっけ?
それならラデでもFP16/FP32が使えるんですが、何か問題が?
>「16bitではいけない」
誰も言ってないね。
>「fp16データはどうあがいてもGPUで勝手に精度を引き上げられない
誰も話してないはずだよね、精度の話は?
248 :
Socket774:04/05/11 05:48 ID:84m+YJ77
>>246 ちなみに、GeforceはデータタイプFP16にもFP32にも対応しているの。
もちろん、演算ではそのまま扱うことが出来るの。
演算精度に向ければ、設計図と描画的に演算精度が不足する24bit演算はチートなの。
「見た目さえ分からなければいいや」ではまさにドライバ的に「描画を省く」もいいわけ。
「見た目さえ"わからなければ"」では別にチートでもなくなるわけ。
しかしそれはチートと非難される。
あくまでDX9の"必要要求"において、データタイプと演算精度を一致させなければならないんであって、
勝手にDX9の定義するデータタイプを内部演算の精度と勘違いする勘違いが出てこようはずも無いの。
何度も言うけど、勘違いしているのはあんた(と他約一名)。
249 :
Socket774:04/05/11 05:49 ID:84m+YJ77
わかりやすく例えてみよう。(あくまでもわかりやすく)
1111111111111111 (データとして意味のある16個、16bitデータ)
CheatGPU RADEONは、これを24個へと引き上げてチートするわけだ。
そのとき、
111111111111111111111111 (24個)
にはならない。何故だかわかるかね?
「設計図では16個しかないのに、なぜ作業員が勝手に24個に上げられるのか?」
16個め以上は設計図には書かれていないので、
「それ以上の精度を持たせていいのか悪いのか、ドライバでは100%判断できない。」
「ドライバは設計者ではない」
だから、チートするときには
111111111111111100000000 (意味のあるデータは16個 チートぶん8個)
になるわけだ。
ところが無知なラデ厨は意味のあるデータとして24bitに繰り上げられる
とか頓珍漢な勘違いをしている。
>>248 >演算精度が不足する24bit演算はチートなの。
誰も話してないはずだよね、精度のお話。
>DX9の定義するデータタイプを内部演算の精度と勘違いする
だから誰が?
データタイプを内部の演算精度と勘違いしていたら、
内部の演算精度とデータタイプが一致してるはずだよね。
あれ?どこかでみたね。
>データタイプと演算精度を一致させなければならない
なんだ、あんたの発言じゃない!
ああ、ごめん。
精度の話はしてなかったんだね。
精度の話じゃない、精度の話じゃない、、っと。
自分に言い聞かせるの大変だ、コリャ。
251 :
Socket774:04/05/11 05:53 ID:84m+YJ77
>>247 >はいはい、そりゃ悪かった。
はいはい、勘違いはもう結構。
で?演算精度の話でしたっけ?
それならラデだとFP32が処理できないんですが、これで問題でないと?
「24bitは過渡期のソリューションだ]チートメーカーも言ってますね。
>誰も言ってないね。
「16bitではいけない」という奴がいることが見えてないね。
>誰も話してないはずだよね、
内部演算精度が高い方が最終的な出力の精度も高くなります。
これのどこが「誰も話してない」のか?目が見えないのなら黙っていろ。
252 :
Socket774:04/05/11 05:55 ID:84m+YJ77
>>250 >誰も話してないはずだよね、精度のお話。
「何度も何度も何度も何度も何度も何度もしているの。」
自分の書いたことも読めないのか?
>だから誰が?
>
>>222-223 こんなことも読めないのか?
データタイプと内部の演算精度と勘違いしていたら、
内部の演算精度とデータタイプが一致してないはずだよね。
あれ?どこかでみたね。
>データタイプと演算精度を一致させなくてもいい
なんだ、あんたの発言じゃない!
ああ、ごめん。
精度の話はしてなかったんだね。
精度の話じゃない、精度の話じゃない、、っと。
自分に言い聞かせるの大変だ、コリャ。
253 :
Socket774:04/05/11 06:00 ID:84m+YJ77
チートの実態は前掲のとおり。
所詮元々が16で設計されていたら、
いかにチートRADEONの力を持ってチートしても出力は16のまま
なのに何故
ここでは詳しい説明は避けますが、fp16 演算を多く繰り返せば繰り返す程、
誤差の蓄積により精度が fp16 よりも悪くなってゆくのは常識です。
なのだろうか?
24bitチートなら減衰しないとでも言うのだろうか?
実データとしてどちらも16bitなのに、片方は減衰し片方は維持すると言うのだろうか?
これはおかしい。
ラデ厨は言い訳に困るといつもエセプログラマを気取りたがるが
所詮無知なためこういうふうに穴があるものなのだ。