PMU란
• Performance Monitoring Unit
• 하드웨어
• CPU 가 수행하는 작업에 대한 로깅을 담당
Architecture specific PMUs
• ARM vs Intel
• ARM(Acronym for Advanced RISC Machine)
• RISC(Reduced Instruction Set Computing)
• 하드웨어 복잡성을 줄이고, 전력 소비 감소에 초점
• ARM vs Intel
• Intel ( 주로 x86)
• CISC(Complex Instruction Set Computing)
• 많은 복잡한 명령어 처리 가능, 고성능 컴퓨팅 환경
• 이때문에, 특정 성능 카운터 들이 다르다.
• ARM - SPE(Statistical Profiling Extension) PMU
• Intel - Top Down analysis
(Intel) Perf Top-down approach

• Intel CPU 의 성능 분석 방법론
• CPU 의 병목 현상을 찾아내는데 유용한 프레임워크
위부터 레벨 1 ,2 ,3

- cpu에서 Uops로 분리가 되면 Uops가 Allocate가 될까? 안될까?
- 잘 끝났으면 Retiring or 아니면 예측 실패
- 할당이 안되면 백엔드 바운드 ? 프론트엔드 바운드?
Frontend Bound

Bad Speculation

Retiring

Backend Bound

ARM SPE counters
• Architecture specific counter 들
• 우리 RPI4 (Cortex-A72) CPU 도 가지고 있다.
Level2
Frontend Bound

- Fetch Latency : 가져오는 속도
- CPU -> TLB -> miss -> 돌아오는 시간이 느리다 : Fetch Latency가 느리다.
- iCacheMiss : 명령어를 가져오려는데 해당 인스트럭션이 없는 경우
- Branch Resteers : 분기 예측이 잘못됨, 파이프라인이 클리어가 되는 경우
- 프로세서가 다음 명령어를 가져오는데 지연이 생김
- rand()처럼 랜덤으로 함수가 돌아서 순차적이 아니라 branch prediction에 실패하면 발생
- Fetch Bandwidth : 얼마나 많이 가져오는지
- Fetch src1 : 인스트럭션을 실행시키는 소스에서 발생하는 대역폭 제약
- 코드의 길이가 길거나 프로그램이 너무 많은 Vmemory를 사용해서 충분히 매핑이 불가능한 경우
- Fetch src2 :
Backend Bound

- 프로그램이 복잡한 연산 or 많은 양의 메모리일 때 발생
- 병렬화를 하거나 메모리 접근 최적화하기
- Core Bound : 프로세서 코어의 성능에 의한 제약
- Divider : 나눗셈 연산에서의 병목
- Exe prts Utilization : 많은 양의 명령어가 특정 포트에 집중될 경우 해당 포트에서 병목
- Memory Bound : 메모리 접근과 관련된 성능 제약
- 메모리에 대한 Access가 병목
- Stores bound : 대량의 데이터를 메모리에 저장해야할 때 발생
- DRAM : 외부메모리에 의한 병목 , 캐시에비해 크지만 느리다. 병목이 발생
Retiring

- 프로세서의 명령이 처리 파이프라인에서 마지막단계에서 잘 끝났을 때 status
- 프로세서가 성공적으로 실행된 명령어를 파이프라인에서 제거 , status에 반영
- Base : 프로세서가 성공적으로 완료한 기본 명령어
- Micor sequencer : 프로세서가 마이크로코드를 사용한 복잡한 명령어
- 높으면 잘돌아간다.
Bad Speculation

- cpu가 다음행동을 예측해서 execution을 했는데 실패할 경우
- 실행한 명령어 취소, 올바른 명령어로
- Branch miss : 분기예측 기능 실패 (likely, unlikely)
- Machine clears : 프로세서가 다양한 이유로 인해 명령어 파이프라인을 클리어해야함
- 특히 복잡한 조건 분기를 많이 포함을 시키거나 메모리에 빈번하게 접근하는 경우 많이 생김