3

gprof(関数プロファイリング)やその他のプロファイリング方法では、プログラムの実行中に発生する浮動小数点演算の数を返すことができることを読みました。したがって、Flopsは通常の演算よりもはるかに高価であるのではないかと考えていました。

4

1 に答える 1

12

x86について話していると仮定しますが、以下の多くは他のアーキテクチャにも同様に当てはまります。

浮動小数点数の演算は整数の演算よりもはるかにコストがかかるため、浮動小数点演算はコストがかかります。とても簡単です。整数の形式により、加算と減算をハードウェアに実装するのが非常に簡単になります。浮動小数点数は(ほとんどの場合)IEEE 754に実装されており、数値を符号、指数、仮数として格納します。これにより、非常に大きい数値と非常に小さい数値を表現できますが、動作速度が犠牲になります。数値の小数点以下3桁しかない場合は、整数を使用して、最後に3で割ることができます。精度の範囲が広いため、事態は複雑になります。

そうは言っても、最近のプロセッサは、以前よりも浮動小数点数の方が優れています。浮動小数点演算は元々、オプションのコプロセッサー(特にIntel 80387)に実装されており、特別な命令でのみアクセスできました。値をx87スタックにプッシュし、操作を実行してから、ハードウェアレジスタにポップバックします。プロセッサを離れなければならなかったので、非常に遅い。さらに重要なことに、これらの特定の操作は、プロセッサが存在するかどうかを確認できなかったため、使用するのが「危険」になりました。存在しない場合、プログラムは機能しますが、コプロセッサをエミュレートするソフトウェアルーチンを使用します。あなたがゲーム開発者であり、たとえば逆平方根に頼ることができなかった場合高速であるため、自分で作業を行うことができ、すべてのシステムで同じように高速に実行できます。一部のシステムではわずかに高速ではなく、他のシステムでははるかに低速です。

現在、プロセッサには、パフォーマンスのために設計された特別な浮動小数点演算があり、さらに重要なことに、そこにあることが保証されています。したがって、これらは非常に高速であり、浮動小数点演算は整数演算よりも不可避的に低速ですが、通常、バグや複雑さを犠牲にして、それについて何かを行うのに十分な問題ではありません。さらに、この回答は、ほとんどの場合、それが洗浄であることを示唆しています。

いずれにせよ、パフォーマンスは今では十分に優れているので、古い格言が始まります-プログラマーの時間はマシンの時間よりも重要であり、浮動小数点数を回避するためのいくつかの派手なアルゴリズムのプログラミングに、単に使用するよりもはるかに多くの時間を費やすことになります彼ら。

于 2012-10-08T08:15:39.373 に答える