GN⁺: Zen 5의 2-어헤드 브랜치 프레딕터: 30년 된 아이디어가 새로운 트릭을 가능하게 하는 방법
(chipsandcheese.com)Zen 5의 2-Ahead Branch Predictor Unit: 30년 된 아이디어가 새로운 트릭을 가능하게 하는 방법
-
서론
- AMD의 Zen 5 아키텍처는 기존 Zen 아키텍처를 완전히 재설계한 것임
- 가장 중요한 변화 중 하나는 새로운 2-Ahead Branch Predictor Unit임
- 이 아이디어는 30년 전 논문에서 유래되었음
-
Branch Predictor의 중요성
- 컴퓨터는 프로그램을 메모리에 저장하고 이를 실행함
- 프로세서는 명령어를 가져오고 실행하는 전단부와 후단부로 나뉨
- 조건부 점프는 파이프라인을 채우는 데 큰 도전 과제임
- 잘못된 예측은 파이프라인을 플러시하고 다시 시작해야 함
- 따라서 프로세서는 가능한 한 정확하게 프로그램 명령어 시퀀스를 예측해야 함
-
2-Ahead Branch Predictor의 등장
- 1990년대 초반부터 제안된 아이디어임
- TAGE predictor와 같은 더 효율적인 방법이 개발되었음
- 그러나 단일 코어 성능을 향상시키기 위해 2-Ahead Branch Predictor가 다시 주목받고 있음
-
x86 아키텍처의 이점
- x86은 고정 길이 명령어를 가진 다른 ISA보다 2-Ahead Branch Prediction에서 더 큰 이점을 얻음
- x86은 명령어 경계를 결정하는 데 더 복잡한 처리가 필요함
- Zen 5는 두 개의 32바이트 페치 파이프와 4-와이드 디코드 클러스터를 사용함
-
Seznec 논문의 구현
- Seznec 논문은 2-Ahead Branch Predictor를 구현하는 방법을 설명함
- Zen 5는 이 논문의 권장 사항을 따름
- 두 개의 32바이트 페치 파이프와 6-와이드 듀얼 포트 오프 캐시를 사용함
- L1 BTB와 L2 BTB를 사용하여 예측 정확도를 높임
-
결론
- Zen 5의 2-Ahead Branch Predictor는 Zen 아키텍처의 중요한 변화임
- 이 새로운 예측기는 향후 Zen 코어 개발에 큰 도움이 될 것임
GN⁺의 정리
- Zen 5의 2-Ahead Branch Predictor는 30년 전 아이디어를 현대적으로 재해석한 것임
- 이 기술은 프로세서의 명령어 예측 정확도를 높여 성능을 향상시킴
- x86 아키텍처의 복잡성을 해결하는 데 특히 유용함
- 이 기사는 CPU 아키텍처와 성능 최적화에 관심 있는 사람들에게 유익함
- 유사한 기능을 가진 다른 프로젝트로는 Intel의 Golden Cove 아키텍처가 있음
Hacker News 의견
- branch prediction에 대한 훌륭한 설명이 있음
- SMT 성능이 흥미로울 것 같음, Zen5c에서 192 Core 또는 384vCPU를 제공함. Zen 6c에서는 256 Core를 기대할 수 있음. Dual Socket 1U Server에서 512 Core와 1024 vCPU 가능성 있음
- 2014년 웹 앱 스케일링 문제를 단일 서버로 해결할 수 있음, 냉각 문제만 해결하면 됨
- 1 RPS per vCPU로 1000 RPS 가능, 캐시 히트 제외
- HN 프론트 페이지도 1000 페이지 뷰 per second를 넘지 않음
- 수십 년 된 논문이 하드웨어 발전으로 "최첨단"이 되는 경우가 흥미로움
- 예: Z-buffer, 3D 비디오 게임에서 사용됨
- 처음 논문에 발표될 때는 주요 주제가 아니었음, 메모리 요구량이 많았기 때문
- 몇십 년 후 메가바이트가 저렴해지면서 모든 실시간 3D 렌더러가 사용하게 됨
- 추측 예측기는 개인 데이터를 유출하는 여러 공격에 취약함. 많은 일반적인 ISA가 취약한데, 이러한 공격의 영향을 줄이기 위한 조치를 취하고 있는지 궁금함
- 이 분야의 초보자로서 2-ahead branch predictor가 무엇인지 명확하지 않음
- 더 많은 branch hints가 필요할 것 같음
- Cold, warm, warmer, 기본값으로 hot 생략? 모든 분기를 cold로 설정하고 하나만 제외하는 것이 나쁜 아이디어일지 궁금함
- 조건부 분기가 있을 때 두 가지 가능한 분기를 모두 가져와 준비하고 잘못된 것을 버리는 것이 왜 어려운지 궁금함
- 더 많은 메모리 대역폭이 필요함, 소비자용 AM5 소켓의 두 메모리 채널은 성능에 비해 부족함
- M2 Max로 이동했는데 메모리 대역폭 개선이 데이터 작업을 가속화함. 무거운 멀티태스킹에서도 Zen 설정의 좁은 메모리 파이프가 자주 막힘
- Zen 5가 두 개의 스레드를 활성화할 때 디코드 클러스터와 동반된 fetch 파이프가 정적으로 분할됨
- 이는 하이퍼 스레딩 성능에 큰 향상을 줄 것 같음. Zen1에서 HT로 인해 약 25% 빨라짐. 최신 모델에서 테스트한 사람이 있는지 궁금함
- 여전히 2-ahead branch predictor가 무엇인지 모르겠음