4

重複の可能性:
浮動小数点除算と浮動小数点乗算

最近、コンピュータが実数の掛け算、割り算、足し算を計算するのにかかる時間を計算するプログラムを作成しました。

そのために、時間間隔を取得するために関数 QueryPerformanceFrequency と QueryPerformanceCounter を使用しました。

私は6,000,000回の反復を使用してプログラムをテストしました:6000000回の乗算、除算、および合計(float変数を使用)で、次の結果が得られます:

O.S = Windows Vista (TM) Home Premium, 32-bit (Service Pack 2)
Processor = Intel Core (TM)2 Quad CPU Q8200
Processor Freq = 2.33 GHz

Compiler = Visual C++ Express Edition


    nº iterations                              time in micro seconds
    6000000 x real    mult + assignment ->     15685.024214 us
    6000000 x real     div + assignment ->     51737.441490 us
    6000000 x real     sum + assignment ->     15448.471803 us
    6000000 x real           assignment ->     12987.614348 us

    nº iterations                              time in micro seconds 
    6000000 x real                mults ->      2697.409866 us
    6000000 x real                 divs ->     38749.827143 us
    6000000 x real                 sums ->      2460.857455 us

    1 Iteration                          time in nano seconds
    real                 mult ->         0.449568 ns
    real                  div ->         6.458305 ns
    real                  sum ->         0.410143 ns

除算は乗算よりも 6 倍遅く、加算は実質的に乗算と同じ (~ 0.42 ns) である可能性はありますか?

4

2 に答える 2

0

最新の CPU では、乗算は加算とほぼ同じ速度です。

Intel の Sandy Bridge では、SSE を使用した乗算に、加算の 4/3 の時間がかかります。しかし、複数の命令を同時に処理できる ILP を考慮すると、実際には同じ時間がかかります。同じ CPU で、ILP を使用すると、単精度の除算に 7 ~ 14 倍の時間がかかります。

出典: Agner Fog の指示表。彼のサイトには非常に優れた読み物がたくさんあります。

于 2012-12-30T20:10:29.823 に答える
0

はい、そうです。除算を手動で行ったことがある場合は、多くのサブ操作が含まれることをご存知でしょう。

加算と乗算の速度はほぼ同じです。これらは、実際の計算よりもオペランドの設定と結果の保存に関係しています。加算と乗算に SSE 命令を使用してコンパイルすることで、それらの間の違いをさらに得ることができる場合があります (x86 の場合)。

于 2012-12-30T19:55:08.857 に答える