5

Linuxパフォーマンスカウンターサブシステムへの新しいコマンドラインインターフェイスコマンドである「perf」を使用して、アプリケーションによって実行される浮動小数点および算術演算の量を測定したいと考えています。(テスト目的で、私が作成した単純なダミー アプリを使用します。以下を参照してください)。

FP および整数演算を測定するために定義された「perf」イベントが見つからなかったため、未加工のハードウェア イベント コード (-rNNN で使用するため、NNN はイベント コードの 16 進値) を調べ始めました。したがって、私の本当の問題は、廃止された命令 (INST_RETIRED) で見つけたコードが、FP と他の命令 (X87 および MMX/SSE) を区別しないことです。特定のコードに適切な umask を使用しようとしたときに、どういうわけか「perf」が umask の組み込みを理解またはサポートしていないことがわかりました。私は試しました:

% perf stat -e rC0 ./a.out

これにより、引退した指示が表示されますが、

% perf stat -e rC002 ./a.out 

これにより、実行された X87 命令に、間違ったパラメーターを指定したことが示されます。そうかもしれませんが、「perf」で生のハードウェア イベントの umask を使用する正しい方法は何ですか? 一般に、perf ツールを使用してプログラムが実行した浮動小数点演算と整数演算の正確な数を取得する方法は何ですか?

どうもありがとう、コンスタンティン・ボヤノフ


ここに私のテストアプリがあります:

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;
  }
}
4

2 に答える 2

6

使用するイベントはプロセッサによって異なります。libpfm4 (http://perfmon2.git.sourceforge.net/git/gitweb-index.cgi) を使用して (showevinfo プログラムを使用して) 利用可能なイベントを特定し、同じディストリビューションから check_events を使用して生のイベントを把握できます。イベントのコード。私の Sandy Bridge CPU は、私が経験的に見つけた FP_COMP_OPS_EXE イベントをサポートしており、これは FLOP カウントに密接に対応しています。

于 2012-09-09T20:44:27.427 に答える
2

perf についてはよくわかりませんが、oprofile には多くのプロセッサの浮動小数点イベントがあります。INST_RETIRED も有効な oprofile イベントであるため、一部重複する可能性があります。

于 2010-12-02T16:22:33.060 に答える