Linuxパフォーマンスツールを使用したアプリケーションのフロップの測定

StackOverflow https://stackoverflow.com/questions/4335011

  •  30-09-2019
  •  | 
  •  

質問

Linux Performance Counter Subsystemへの新しいコマンドラインインターフェイスコマンドである「PERF」を使用して、いくつかのアプリケーションによって実行されたフローティングポイントと算術演算の拡張操作を測定したいと思います。 (テストのために、作成したシンプルなダミーアプリを使用します。以下を参照してください)。

FPおよび整数操作を測定するために定義されている「PERF」イベントが見つからなかったため、生のハードウェアイベントコードを掘り始めました(NNNがイベントコードの16進価値である-RNNで使用します)。したがって、私の本当の問題は、退職した指示(inst_retired)のために見つけたコードがFPと他の指示(x87およびMMX/SSE)を区別しないということです。特定のコードに適切なUmaskを使用しようとしたとき、「Perf」がUMASKの包含を理解またはサポートしていないことがわかりました。試してみました:

% perf stat -e rC0 ./a.out

それは私に引退した指示を与えてくれますが、

% perf stat -e rC002 ./a.out 

実行されたX87の指示が私に誤ったパラメーターを提供したと言っていることがわかります。たぶんそうですが、「PERF」で生のハードウェアイベントを使用する正しい方法は何ですか?一般に、PERFツールを使用して実行されるプログラムをフローティングポイントと整数操作の正確な数を取得する方法は何ですか?

Konstantin Boyanovに感謝します


これが私のテストアプリです:

int main(void){
  float  numbers[1000];
  float res1;
  double doubles[1000];
  double res2;

  int i,j=3,k=42;

  for(i=0;i<1000;i++){
    numbers[i] = (i+k)*j;
    doubles[i] = (i+j)*k;
    res1 = numbers[i]/(float)k;
    res2 = doubles[i]/(float)j;
  }
}
役に立ちましたか?

解決

使用するイベントはプロセッサによって異なります。 libpfm4(http://perfmon2.git.sourceforge.net/git/gitweb-index.cgi)を使用して、利用可能なイベント(showevinfoプログラムを使用)を決定し、同じ分布からcheck_eventsを決定して、生の測定値を判断できます。イベントのコード。私のSandy Bridge CPUは、私が経験的に発見したFP_COMP_OPS_EXEイベントをサポートしています。

他のヒント

PERFについてはわかりませんが、Oprofileには多くのプロセッサに浮かぶ点イベントがあります。 Inst_retiredは有効なOprofileイベントであるため、重複があるかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top