2016-05-03 8 views
1

私はプログラムをプロファイリングするためにインテルVTuneを使用しています。int Vtuneからの整数の加減算イベントカウントはどこですか?

私が使用しているCPUはIVY Bridgeです。

すべてのハードウェア命令イベントは、ここで見つけることができます:FP計算のuopの

https://software.intel.com/en-us/node/589933

FP_COMP_OPS_EXE.X87 Numberこの サイクルを実行しました。 FADD、FSUB、FCOM、FMUL、整数MULおよびIMUL、 FDIV、FPREM、FSQRTS、整数DIVおよびIDIVの数。このイベントは、 はFADDがFP_COMP_OPS_EXE.X87は整数乗算と整数除算を含めるように思わ の

から超越流れの途中で使用を区別しません。ただし、そこに整数加算と整数減算はありません。私は上記の2つの指導方法を上記のウェブサイトから見つけることはできません。

整数加算と整数減算命令をカウントするイベントは何ですか?

+1

それらのためのカウンタはありません。 'cmp'、' and'、 'xor'のような安価なものではなく、単に' add'/'sub'命令の動的カウントを望むなら、[binary instrumentation]を見てください(http://stackoverflow.com//36650210/how-to-profile-the-number-of-additions-mutltiplications-etc-vtune/36658984#36658984)を参照してください。 'add'は通常のCPU上で最も安価な2入力命令の1つです。 IvBでは、任意のALUポートで実行されます。1cレイテンシ、0.333cスループットあたり1つです。 'mov reg、reg'やゼロ設定命令だけが安いです。 [x86タグwiki](http://stackoverflow.com/tags/x86/info)を参照してください。 –

答えて

1

私はあなたの質問に多くのことを読んだが、ここに行くよ:

それはあなたのコードは、計算バインドされている場合は、整数の意義は、それらを直接測定することなく追加し、潜水艦を推測する方法を見つけることができている可能性があります。たとえば、UOPS_RETIRED.ALL - FP_COMP_OPS_EXE.ALLは、あなたのコードが計算上の境界であることを確認するための何かをすでに行っていると仮定すると、加算と補完の非常に大まかな見積もりを提供します。

あなたはいますか?そうでない場合は、VTuneの基本分析から始まり、メモリ、キャッシュ、フロントエンドのボトルネックを解消するのに役立ちます。

  • クロスリファレンスアイビーブリッジのブロック図でUOPS_DISPATCHED_PORT、またはより良い、算術の特定の種類はどのポート(上で実行できるかのリスト:あなたはすでにこれをやった場合は、さらにいくつかのオプションがあります私は見つけることができません)。
  • プログラムソース、コンパイラフラグまたはアセンブリを変更し、基本分析のような粗いプロファイルを再実行し、INST_RETIRED.ANY/CPU_CLK_UNHALTEDのようなメジャーのレベルで影響があるかどうかを確認します。

申し訳ありませんより直接的な答えはありません。

+1

Agner Fogは、どの命令がどのポートを使用できるかをテストしました。公開されている[instruction tables](http://agner.org/optimize/)。 'add'、' sub'、 'xor'などの最も単純な整数命令は、任意のCPUのすべてのALUポートで実行できます。それはこれを愚かな疑問にするものです: 'add'と' sub'は特別なものではなく、他のすべてのものと同じ実行リソースで競合します。 (限られたポートで動作するFP addとmulとは異なります)。 –

+0

ありがとう、それは私が探していたものです。 Agnerと確認する必要があります。 この疑問は、私がこの道を導き出すと思うかもしれない実際の世界の使用事例の大部分に対処するためにOPがおそらく尋ねたいと思うよりも具体的であるという疑いに同意するが、私はそれを慈悲深く読むのが最高です。私はそれが "愚か"ではないと肯定的ではない。あなたは正しいかもしれません。 –

+1

これは本当ですが、いくつかの整数を加算したスカラーループを最適化したり、ポインタインクリメントのループオーバーヘッドの一部として 'add'を測定したいと思ったことがあります。 OPは確かにそのような奇妙な要求を説明するどんなシナリオも提案しなかった。 (これはもう一つのことです: 'add'はループオーバーヘッドの通常の部分ですが、' fadd'を数えることは "work"を数えます)。とにかく、あなたの "それをしないで、代わりにこれを行う"という答えは、実際にバイナリ計測や何かを使ってinsnsを数えていくより有用なアドバイスです。 –

関連する問題