0

私はFFTライブラリのベンチマークを見ていて、なぜ倍精度演算が単精度演算よりも速いのか疑問に思っています (32 ビット ハードウェアでも)。

4

1 に答える 1

1

Intel CPU の場合 - すべてはコンパイラに依存します。32 ビット アプリケーション用にコンパイルすると、単精度と倍精度が同じ速度の通常の i87 浮動小数点を使用できます。または、SP には SSE、DP には SSE2 を選択できます。ここで、SSE (レジスタで 4 ワード) は SSE2 (レジスタあたり 2 ワード) の 2 倍の速さです。64 ビット用にコンパイルすると、i87 命令は使用できません。次に、浮動小数点は常に SSE/SSE2 を使用するようにコンパイルされます。コンパイラまたは特定のプログラムにより、これらは SIMD (単一命令複数データ - 一度に 4/2 ワード) または SISD (レジスタごとに 1 ワードを使用する単一データ) としてコンパイルできます。それから、SP と DP は同様の速度になり、コードは 32 ビットのコンパイルよりも遅くなる可能性があると思います。

RAM と場合によってはキャッシュからのデータを使用すると、バス速度によってパフォーマンスが制限される可能性があり、SP は DP よりも高速になります。コードが私の FFT ベンチマークに似ている場合、スキップされた順次読み取りと書き込みに依存します。次に、速度は、少なくとも 64 バイトのバーストで読み取られるデータの影響を受けます。この場合、SP の方が少し速い可能性があります。

三角関数などは DP で計算されることがよくあります。次に、DPからSPへの変換により、SPは少し遅くなります。

于 2013-11-22T21:44:36.707 に答える