2016-09-27 12 views
1

メモリ転送などの他のすべての問題を無視します。浮動小数点乗算と加算の計算コストは​​いくらですか?

私はビットフリップの予想数として数量化すると思いますが、コストのいくつかの尺度を探しています。 (32ビットと言う)の数と、追加するコストとの比です。

私は、考慮すべき価値があるかもしれないいくつかの重要な問題(数字に同じ指数などがあるかどうかなど)があるかもしれないと思います。

編集:ハードウェアの時間や量ではなく、これらの操作を実行するのに必要なエネルギーの量に関心があります。「ビットフリップの予想数」が関心の量です。私はこれは明確に定義された質問だと思います。浮動小数点の乗算を行うためには、あるアルゴリズムで必要となる「予想されるビットフリップ数」があります。そして、私はすべてのアルゴリズムの最小値を探しています。

編集2:お返事いただきありがとうございます。私が得た最も関連性の高い回答は、Mark Horowitz's estimates(33ページ参照)というnjuffaの回答でした。ホロヴィッツの記事、わずかに異なる番号でmore up-to-date paperは、それは次のようになります。最新のプロセッサ上で

Float32 Mult: 3.7pJ. 
Float32 Add: 0.9pJ 
Int32 Mult: 3.1pJ 
Int32 Add: 0.1pJ 
+0

ハードウェアのALU実装と、無限の複雑さの「無限の」シリコンリソースなど、より具体的にする必要があると思います。浮動小数点がFPGA上でどのように実装されているかについてのリソースを探すことができます。それはおそらく良い出発点です。しかし、そうであるように、この質問はおそらく範囲が少し広すぎるでしょう。 –

+0

私は時間/空間の複雑さを見ていればこれらがどのように関係するかを見ていますが、単純にアルゴリズムを実行するのに必要なビットフリップの量を測定しているとすれば、そこには明確な数字があると思います。 – Peter

+2

加算と乗算の相対的なエネルギー消費は、オペランドのビット幅に依存します。 32ビットの浮動小数点演算では、スタンフォードのMark Horowitz [数を与える](https://www.futurearchs.org/sites/default/files/horowitz-ComputingEnergyISSCC.pdf)は、0.9 pJと4 pJ乗算(45nmプロセスの時代遅れですが、現代の14nmプロセスではまだ一般的な関係が成り立っていると思います)。 – njuffa

答えて

2

は、小数点乗算をフローティングやや一般的にほかよりも高価である(コンパイラは通常x+xでを置換する理由の一つです)。

x86およびx86_64の場合、浮動小数点演算はほとんどの場合、SSE命令(ADDSS、MULSSなど)を使用して行われます。加算と乗算は一定時間であり、「早期終了」なし(パイプライン処理が容易)です。

実際の相対費用は、数値化がより困難であり、多くのことに依存します。ここでの標準的な言及はAgner霧の「命令のレイテンシ、スループットおよびマイクロオペレーション故障のリスト」である:私は聞いたことhttp://www.agner.org/optimize/

一つラフヒューリスティックは、(ただしのための参照を持っていない)乗算は約50を取ることです% より長いです。

+0

AFAIK、多くの(ほとんどの?)x86(32ビット)システムでは、FP数学はFPU上で行われます。すべてではないにしてもx86_64システムのほとんどでは、SSEを使用して実行されます。 –

+0

現代のコンパイラが 'x * 2'を' x + x'で置き換えることは、gccの '-ffast-math'オプションのようなものなしでは完全にはわかりません。私は間違っているかもしれません;覚えておくべきFPエッジのケースが多すぎます。 –

+0

@RudyVelthuis私はこれがあなたのコンパイラとオプションに依存すると思う:Clangは両方でSSEを使うようだが、GCCは何らかの理由でFPUを好むようだ。 –