アカウント名:
パスワード:
数値演算の精度を端折って高速化したと。
浮動小数点演算で、64ビットのdouble型演算の代わりに、可能な限り32ビットのfloat型の演算を使用することで、大幅にその演算速度が向上したという。
数値演算の精度が問題になる場面で、不具合が起きなければいいが・・・Officeスウィート系のWebアプリは怖くて使えんなあ。
明らかに処理の内容を変えて「高速化」というのは疑問を感じますね。それで、C++に迫ったといわれてもなんか違う。
世の中の最適化を全否定だな。答えが一緒なら処理なんて関係ないでしょ。
型が単精度から倍精度に変わるんだよ?常に答えが一緒になるとは限らないでしょ。
んで、最適化によって値が変わる可能性があるから、Cとかにはvolatileが用意されてるわけで。JavaScriptにvolatileに相当するものは私の知る限りは無いはず。そういう言語で値が変わるかも知れない最適化ってのはちょっと問題ある気がする。
JavaScriptの仕様的にはオーバーフローしたら倍精度に勝手に変換するみたいだけど、そこら辺どうなんだろ。仕様に合わせて内部処理を最適化しただけって話ならいいんだけど。
んで、最適化によって値が変わる可能性があるから、Cとかにはvolatileが用意されてるわけで。
違うけど?
ん?冗長性の排除も最適化の一種だよね?それによってはき出す値が一定しないなら「最適化によって値が変わる」って言えると思ってたんだけど、違うかな。特にポインタの排除なんか、Cだと値が不定になるわけでしょ?
実際にvolatileが必要になるケースに出会った事がなくて資料上で把握していた知識なので、認識が間違ってたらその部分を指摘してもらえるととても嬉しい。
volatileが必要になる典型的パターンて外部とメモリ経由でやりとりする場合じゃないの。フラグの監視とか最適化によってメモリとの値の読み書きがレジスタ上だけで終わっちゃう可能性あるけど、こうなってくるとDMAとかで外部デバイスが値を書き換えたときにレジスタの中身をみちゃうので書き換えられたことが解らない。あるいは別スレッドで書き換えた場合とかね。言語的には自スレッド以外が書き換えるかどうかを指定する手段がないのでvolatileつけて毎回メモリ見に行かせないと困る。
確かに挙動は変わるんだけど、今話題になってる計算精度の問題とはまた違う。
>あるいは別スレッドで書き換えた場合とかね。言語的には自スレッド以外が書き換えるかどうかを指定する手段がないのでvolatileつけて毎回メモリ見に行かせないと困る。
そのvolatileの使い方は間違ってますよ。C11ではAtomicが追加されたたのでそれを使用しましょう。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell
数値演算の精度が問題になることないの? (スコア:0)
数値演算の精度を端折って高速化したと。
浮動小数点演算で、64ビットのdouble型演算の代わりに、可能な限り32ビットのfloat型の演算を使用することで、大幅にその演算速度が向上したという。
数値演算の精度が問題になる場面で、不具合が起きなければいいが・・・Officeスウィート系のWebアプリは怖くて使えんなあ。
Re: (スコア:0)
明らかに処理の内容を変えて「高速化」というのは疑問を感じますね。
それで、C++に迫ったといわれてもなんか違う。
Re: (スコア:0)
世の中の最適化を全否定だな。答えが一緒なら処理なんて関係ないでしょ。
Re: (スコア:0)
型が単精度から倍精度に変わるんだよ?
常に答えが一緒になるとは限らないでしょ。
んで、最適化によって値が変わる可能性があるから、Cとかにはvolatileが用意されてるわけで。
JavaScriptにvolatileに相当するものは私の知る限りは無いはず。
そういう言語で値が変わるかも知れない最適化ってのはちょっと問題ある気がする。
JavaScriptの仕様的にはオーバーフローしたら倍精度に勝手に変換するみたいだけど、そこら辺どうなんだろ。
仕様に合わせて内部処理を最適化しただけって話ならいいんだけど。
Re: (スコア:0)
んで、最適化によって値が変わる可能性があるから、Cとかにはvolatileが用意されてるわけで。
違うけど?
Re: (スコア:0)
ん?
冗長性の排除も最適化の一種だよね?
それによってはき出す値が一定しないなら「最適化によって値が変わる」って言えると思ってたんだけど、違うかな。
特にポインタの排除なんか、Cだと値が不定になるわけでしょ?
実際にvolatileが必要になるケースに出会った事がなくて資料上で把握していた知識なので、認識が間違ってたらその部分を指摘してもらえるととても嬉しい。
Re:数値演算の精度が問題になることないの? (スコア:0)
volatileが必要になる典型的パターンて外部とメモリ経由でやりとりする場合じゃないの。
フラグの監視とか最適化によってメモリとの値の読み書きがレジスタ上だけで終わっちゃう可能性あるけど、
こうなってくるとDMAとかで外部デバイスが値を書き換えたときにレジスタの中身をみちゃうので書き換えられたことが解らない。
あるいは別スレッドで書き換えた場合とかね。言語的には自スレッド以外が書き換えるかどうかを指定する手段がないので
volatileつけて毎回メモリ見に行かせないと困る。
確かに挙動は変わるんだけど、今話題になってる計算精度の問題とはまた違う。
Re: (スコア:0)
>あるいは別スレッドで書き換えた場合とかね。言語的には自スレッド以外が書き換えるかどうかを指定する手段がないのでvolatileつけて毎回メモリ見に行かせないと困る。
そのvolatileの使い方は間違ってますよ。
C11ではAtomicが追加されたたのでそれを使用しましょう。