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