私は浮動小数点コプロセッサが浮動小数点演算のどのソフトウェア実装よりも高速に動作することを知っていますが (だから私は言われました)、この違いがどれほど大きいかという直感を完全に欠いています。
答えはおそらく、アプリケーションと、マイクロプロセッサとスーパーコンピュータの間で作業する場所によって異なります。特にコンピューターシミュレーションに興味があります。
この質問に対する記事や論文を指摘していただけますか?
私は浮動小数点コプロセッサが浮動小数点演算のどのソフトウェア実装よりも高速に動作することを知っていますが (だから私は言われました)、この違いがどれほど大きいかという直感を完全に欠いています。
答えはおそらく、アプリケーションと、マイクロプロセッサとスーパーコンピュータの間で作業する場所によって異なります。特にコンピューターシミュレーションに興味があります。
この質問に対する記事や論文を指摘していただけますか?
パフォーマンスは非常に多くの要因に依存するため、一般的な答えは明らかに非常に曖昧です。
ただし、私の理解では、ハードウェアに浮動小数点 (FP) 演算を実装していないプロセッサでは、ソフトウェアの実装は通常、整数演算よりも10 倍から 100 倍遅くなります(実装が悪い場合はさらに悪化します)。常に CPU 上のハードウェアに実装されます。
正確なパフォーマンスは、整数ハードウェアの機能など、多くの要因に依存します。一部の CPU には FPU がありませんが、FP 計算の高速なソフトウェア エミュレーションの実装に役立つ整数演算機能を備えています。
njuffa、Cristina Iordache、Ping Tak Peter Tang が言及した論文、インテル XScale アーキテクチャーの浮動小数点サポートと数学ライブラリーの概要は、これをサポートしています。Intel XScaleプロセッサの場合、レイテンシとしてのリスト (抜粋):
integer addition or subtraction: 1 cycle
integer multiplication: 2-6 cycles
fp addition (emulated): 34 cycles
fp multiplication (emulated): 35 cycles
したがって、これにより、整数演算と FP 演算の間で約 10-30 倍になります。この論文では、GNU 実装 (GNU コンパイラーがデフォルトで使用するもの) は約 10 倍遅く、合計で 100 から 300 倍になることにも言及しています。
最後に、上記はFPエミュレーションがコンパイラによってプログラムにコンパイルされた場合のものであることに注意してください。一部のオペレーティング システム (Linux や WindowsCE など) も、OS カーネルに FP エミュレーションを備えています。利点は、FP エミュレーションを使用せずに (つまり、FPU 命令を使用して) コンパイルされたコードであっても、FPU を使用しないプロセスで実行できることです。カーネルは、サポートされていない FPU 命令をソフトウェアで透過的にエミュレートします。ただし、このエミュレーションは、オーバーヘッドが増えるため、プログラムにコンパイルされたソフトウェア エミュレーションよりもさらに遅くなります (約 10 倍)。明らかに、このケースは、一部のプロセッサに FPU があり、一部のプロセッサにない (x86 や ARM など) プロセッサ アーキテクチャにのみ関連します。
注:この回答では、(エミュレートされた) FP 演算のパフォーマンスを、同じプロセッサでの整数演算と比較しています。あなたの質問は、ハードウェア FP 操作と比較した (エミュレートされた) FP 操作のパフォーマンスに関するものであると読まれるかもしれません (あなたの意図がわからない)。ただし、FP がハードウェアに実装されている場合、通常 (ほぼ) 整数演算と同じくらい高速であるため、結果はほぼ同じになります。