11

さまざまな操作に必要なおよその CPU サイクル数の参照を見つけようとしています。

正確な数値は必要ありません (これは CPU によって異なるため) が、友人との議論で引用できる概算の数値を示す、比較的信頼できるものが欲しいです。

例として、浮動小数点除算は、ビットシフトを実行するよりも多くの CPU サイクルを必要とすることは誰もが知っています。

違いは、分割が約100サイクルで、シフトが1であるということだと思いますが、それを裏付けるために引用するものを探しています。

誰もそのようなリソースを推奨できますか?

4

4 に答える 4

4

x86プロセッサについては、インテル®64およびIA-32アーキテクチャー最適化リファレンス・マニュアル、おそらく付録Cを参照してください。

ただし、最新のx86プロセッサで命令を実行するのに必要なサイクル数を把握するのは簡単ではありません。これは、キャッシュ内のデータへのアクセス、整列アクセス、分岐予測が失敗するかどうか、ストールがある場合などに大きく依存するためです。命令パイプラインと他の多くのもの。

于 2010-04-23T23:27:45.623 に答える
4

これをテストするために小さなアプリを作成しました。シンセメーカーの無料版を使用した非常に近似的なアプリ...eは空の場合、数字は非常に近似的なサイクルです

  divide|e:115|10
    mult|e: 48|10
     add|e: 48|10
    subs|e: 50|10
compare>|e: 50|10
     sin|e:135:10

サイクル アナライザーの測定値は 50 から 100 まで大きく変動します。通常、予想される量の 1 倍または 2 倍です。これらは平均を表す数値です。サイクル アナライザーは非常に大まかなツールですが、公正な結果が得られます。たとえばオーディオ レートで exp と base の両方を計算する ASM では約 800 サイクルなので、上記の数値は少なくとも 50% に近いと言えます。格差はもっとあると思った!倍くらいのようです。私が作成したファイルを SM 無料版で実行したい場合は、私にメールを送ってください。exe を保存するつもりだったので、私はそれを実行しましたが、無料版で保存することはできません。バージョン 1.17 でゼロからコーディングするつもりはありません。

于 2011-04-24T10:11:34.767 に答える
1

これはハードウェアに依存します。最善の方法は、テストしたい特定のハードウェアでいくつかのベンチマークを実行することです。

ベンチマークはおおよそ次のようになります。

  • プリミティブ操作を 100 万回実行する (たとえば、2 つの整数を加算する)
  • 実行にかかった時間を記録します (たとえば、秒単位で)
  • マシンが 1 秒間に実行するサイクル数を掛けると、消費されたサイクルの合計数が得られます。
  • 1000000 を前のステップの数値で割ります。これにより、サイクルあたりの命令数が得られます。パイプライン処理では、これが 1 未満になる可能性があることに注意してください。
于 2010-04-23T23:12:46.000 に答える