분기가 가장 자주 잘못 예측되는 위치에서 위치를 찾으려고합니다. 매뉴얼에서 권장하는분기가 잘못 예측 된 소스 위치를 찾으십시오.
perf record ./a.out
a.out
이 옵션 -ggdb -fno-omit-frame-pointer
로 컴파일 다음과 같이 나는 시도를 규칙적했다.
어떻게 이러한 지점을 찾을 수 있습니까?
분기가 가장 자주 잘못 예측되는 위치에서 위치를 찾으려고합니다. 매뉴얼에서 권장하는분기가 잘못 예측 된 소스 위치를 찾으십시오.
perf record ./a.out
a.out
이 옵션 -ggdb -fno-omit-frame-pointer
로 컴파일 다음과 같이 나는 시도를 규칙적했다.
어떻게 이러한 지점을 찾을 수 있습니까?
기본적으로 perf record
은 cycles 이벤트에서 샘플링을 수행합니다. 주어진 사이클 수의 이벤트가 발생할 때마다, 그 안에 (예를 들어, 명령 포인터와 같은) 다른 것의 샘플이 기록됩니다. 이를 통해 주로 코드의 어느 부분을 보냈는지 관찰 할 수 있습니다.
샘플링을 수행하려는 이벤트는 -e 옵션으로 지정됩니다. 하드웨어에 따라 잘못 예측 된 지점을 지정하려고 시도 할 수 있으며 샘플은이 이벤트의 모든 X 발생에만 생성됩니다. 그러나 모든 이벤트에 대해 샘플링이 가능한지 확실하지 않습니다.
내가 정말 무엇을 의미하는지 모르겠지만, 내 반환 한 3.11 버전에서 다음 옵션이 존재합니다
-j, --branch 필터 이 지점 스택 샘플링을 수행 할 수 있습니다. 각 샘플은 일련의 연속 된 분기를 캡처합니다. 각 샘플로 캡처 된 브랜치의 수는 기본 하드웨어 인 , 관심있는 분기 유형 및 실행 된 코드에 따라 다릅니다. 필터를 활성화하여 캡처 된 분기 유형을 선택할 수 있습니다.
"-j"는 LBR - 인텔 마지막 분기 레코드 (CPU가 실행 한 이전 분기의 N 개 목록)입니다. @ user46317은'perf record -e branch-misses'를 필요로하며, 대부분의 CPU 이벤트는주기적인 샘플링을 지원합니다 (하드웨어는 X 이벤트마다 perf 인터럽트를 생성합니다). 내 생각에, uncore 이벤트는 perf 인터럽트를 생성 할 수 없으며 현재 또는 총 값에 대해서만 폴링 될 수 있습니다. – osgx