2010-12-02 2 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 

: 내가 함께했습니다. 아마도 그렇 겠지만, 'perf'와 함께 원시 하드웨어 이벤트의 umasks를 사용하는 올바른 방법은 무엇입니까? 일반적으로 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 이벤트이기 때문에 약간 겹칠 수도 있습니다.

관련 문제