2010-12-02 14 views
4

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

FPと整数演算を測定するために定義された 'perf'イベントが見つからなかったので、生のハードウェアイベントコード(NNNはイベントコードの16進値である-rNNNとともに使用される)を掘り起こしました。だから私の本当の問題は、退職した命令(INST_RETIRED)で見つかったコードは、FPと他の命令(X87とMMX/SSE)の区別をしないということです。特定のコードに適切なumasksを使用しようとしたとき、私は何とか 'perf'がumaskインクルードを理解していないか、またはサポートしていないことが分かった。私に実行X87命令を与える、私は間違ったパラメータを与えなければならないと言う

% perf stat -e rC0 ./a.out 
私にリタイアした命令を与え

が、

% perf stat -e rC002 ./a.out 

:私は試してみました。おそらくそうかもしれませんが、生のハードウェアイベントのumaskを 'perf'で使用する正しい方法は何ですか?通常、perfツールを使用して実行されるプログラムの浮動小数点演算と整数演算の正確な数を取得する方法は何ですか?私は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; 
    } 
} 
+0

あなたのCPUは何ですか? – osgx

答えて

4

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

2

が、OProfileが、多くのプロセッサの浮動小数点イベントがあります。

多くのおかげで、 コンスタンチンBoyanov


は、ここに私のテストアプリです。 INST_RETIREDも有効なoprofileイベントであるため、重なりがあるかもしれません。

関連する問題