Agnerのinstruction tablesによれば、単一の逆数演算と1回の積和演算よりも遅いです。 (これは、測定されたx86アーキテクチャ間で共通するように思われる)なぜfp除算は逆数よりも遅く、積算よりも遅い
これは、piledriverアーキテクチャのテーブルからの抜粋です。
MULSS MULSD x,x/m 1 5-6 0.5 P01 fma
MULPS MULPD x,x/m 1 5-6 0.5 P01 fma
VMULPS VMULPD y,y,y/m 2 5-6 1 P01 fma
DIVSS DIVPS x,x/m 1 9-24 5-10 P01 fp
VDIVPS y,y,y/m 2 9-24 9-20 P01 fp
DIVSD DIVPD x,x/m 1 9-27 5-10 P01 fp
VDIVPD y,y,y/m 2 9-27 9-18 P01 fp
RCPSS/PS x,x/m 1 5 1 P01 fp
第4番目の値はレイテンシです。したがって、乗算演算子は5-6、除算演算子は9-24、逆演算子演算子は5サイクルかかる。 24> 6 + 5以降、私は2つの別々の操作が1つの単一の操作よりも速く、なぜ本質的に同じ結果を得るのか不思議です。
この質問に対する回答は、エラーの測定に関係すると思われます。おそらく、分裂が逆数と乗算よりはるかに正確である場合があります。これが当てはまる場合、エラー測定はどのように比較されますか?例えば、線形の関係はありますか?除算は逆数+乗算の2倍近く遅く、精度も2倍ですか?
を参照してください。 ['rpcss'は11.5バイナリの場所に適しています](http://www.felixcloutier.com/x86/RCPSS.html)。一方、 'divss'はIEEEの除算ですので、24バイナリの場所には良いです。 –
インテルのドキュメントでは、「RCPSS(スカラ単精度浮動小数点値の逆数を計算する)命令は、ソースオペランド内の***単精度浮動小数点値の近似*** ***35逆数を計算します。結果をデスティネーションオペランドのダブルワードの に格納します。 (強調鉱山) –
平方根とその相反操作に関する関連する質問を参照してください:http://stackoverflow.com/questions/1528727/why-is-sse-scalar-sqrtx-slower-than-rsqrtx-x –