PE Notes · CA/OS
파이프라인 해저드
파이프라인이 예정 클럭에 다음 명령을 못 넣는 해저드를 구조·데이터·제어로 가르고, RAW와 포워딩·분기 예측을 정리합니다.
다섯 칸을 겹치면 클럭마다 한 명령이 나와야 합니다. 앞 결과가 없거나 하드웨어가 겹치거나 분기가 갈리면, 그 약속이 깨집니다. 는 다음 명령을 예정 사이클에 넣지 못하게 만드는 상황입니다. 방치하면 정지(Stall)가 늘거나 틀린 값이 나갑니다.
세 종류의 걸림
기본 단은 IF(인출) → ID(해독) → EX(실행) → MEM(메모리) → WB(기록)입니다. 겹침이 이론 처리량이고, 의존과 충돌이 현실입니다.
| 종류 | 원인 | 손 |
|---|---|---|
| 같은 포트·메모리·연산기를 동시에 씀 | 자원 복제, I/D 캐시 분리 | |
| 뒤 명령이 앞 결과를 아직 못 봄 | , 스톨, NOP | |
| 분기가 PC를 바꿔 이미 넣은 단이 무효 | , 지연 분기 |
데이터 해저드는 세 순서로 다시 갈립니다. RAW는 쓰기 전에 읽으려 합니다. 가장 흔합니다. WAR는 읽기 전에 뒤가 같은 칸에 씁니다. WAW는 같은 목적지에 쓰기가 잇달아 순서가 뒤집힙니다. 단일 파이프에서는 RAW가 주 적이고, 비순차·슈퍼스칼라에서 WAR·WAW가 드러납니다.
| 유형 | 한 줄 |
|---|---|
| RAW | 앞 쓰기 전에 뒤가 읽음 |
| WAR | 앞 읽기 전에 뒤가 씀 |
| WAW | 같은 목적지에 쓰기 두 번 |
앞으로 넘기고, 갈림을 점친다
포워딩(바이패스)은 EX 결과를 WB까지 기다리지 않고 다음 EX로 바로 줍니다. 하드웨어 경로를 더 깔아 RAW 스톨을 줄입니다. 경로가 없으면 빈 칸(버블)을 넣어 의존이 풀릴 때까지 멈춥니다. 단순하고 느립니다.
분기는 다음 PC를 늦게 압니다. 정적 예측은 항상 간다/안 간다입니다. 동적 2비트는 최근 패턴을 세어 맞히는 비율을 올립니다. 틀리면 파이프를 비우고 다시 채웁니다. 투기 실행은 예측 길을 미리 돌립니다. 성능은 오르고, 잘못된 길이 남긴 흔적이 보안 이슈의 출발이 되기도 합니다.
슈퍼스칼라는 한 클럭에 여러 명령을 발행합니다. 해저드는 일부 파이프만 멈춰도 이슈 폭이 꺾입니다. 의존 추적이 무거워집니다. GPU의 수많은 스레드는 그 정지를 다른 워프로 숨기는 다른 칸이고, OS 스케줄·인터럽트는 파이프가 아니라 프로세스 자리를 바꿉니다.
답안은 5단, 세 해저드, RAW/WAR/WAW, 포워딩과 분기 예측을 한 장에 닫습니다.