アセンブリコードの効率を計算するのに役立つテーブルまたは類似のものを探しています。
私はビットシフトに1 CPUクロックかかることを知っているので、実際に加算(減算は同じにする必要があります)、乗算、および除算している値がわかっている場合はおそらく除算時間を計算する方法を探しています。
整数値に関する情報が本当に必要ですが、フロート実行時間も歓迎します。
一般に、これらの各オペレーションは、引数がパイプラインのさまざまなステージのレジスタにある場合に実行する場合にも、1クロックサイクルかかります。
レイテンシとはどういう意味ですか?操作がALUで費やすサイクル数は?
この表が役立つ場合があります: http://www.agner.org/optimize/instruction_tables.pdf
最新のプロセッサはスーパースカラーであり、順序が狂って実行される可能性があるため、1サイクルを超える命令の合計が1を超えることがよくあります。マクロコマンドの引数が最も重要ですが、除算にはXOR(<1サイクルのレイテンシ)。
多くのx86命令は、複雑な場合(REPコマンドやより悪いMWAITなど)、いくつかのステージを完了するために複数のサイクルを必要とする場合があります。
アセンブリコードの効率を計算することは、最近のOut of Order Execution Super Scalarパイプラインを使用するための最良の方法ではありません。プロセッサーの種類によって異なります。これは、前後の命令によって異なります(追加追加のコードを追加して、ときどき高速に実行することができます!)。一部の操作(特に除算)は、より古い予測可能なチップであっても、実行時間の範囲があります。実際には、多くの反復のタイミングが唯一の方法です。
インテルcpuに関する情報は インテルソフトウェア開発者マニュアル にあります。たとえば、レイテンシは整数の加算では1サイクル、整数の乗算では3サイクルです。
乗算については知りませんが、加算は常に1サイクルかかると思います。