- 파이프라인이 무엇인가?
- 세탁기에 비유, 기존엔 건조, 세탁, 탈수 모두를 하나의 복합 세탁기에서 진행
- 그러면 건조 - 세탁 - 탈수 모두 끝날때까지 너무 오래걸림
- 건조기 - 세탁기 - 탈수기로 나누자 (같은 용량이라 가정)
- 같은 시간 내에 처리하는 빨래 양이 훨씬 많아짐
- Throughput (같은 시간 내의 처리량)은 증가하나 Latency ( 빨래 하나의 처리 시간)은 오히려 늘어남
- 레지스터에 이전 상태값을 저장해야 하기 떄문 → 오버헤드 발생
문제점은?
- 각 단계마다 일정한 사이클이 들어가기 때문에, 일찍 끝나도 기다려야 함
- 이는 가장 느린 스테이지가 전체 사이클을 결정한다는 것을 의미
- 내가 끝났지만 다음 사람의 일이 오래 걸려서 나는 기다려줘야 함
- 심지어 나는 다음 일을 하지 않아도 되는 일이 발생
- 각 스테이지가 밸런스있게 나누어져 있다면 효율 증가
- 명령어가 한번에 실행되는 것이 아닌 각 단계를 거쳐야 함 !!
- 기계어는 넘어갑시다
Fetch → Decode → Execute → Memory → Write Back
MIPS (RISC) 아키텍처에서는 위와 같은 과정을 거침
RISC vs CISC
RISC ( Reduced Instruction Set Computer )
- 각 명령어는 클럭을 최소한으로 사용하도록 !!
CISC ( Complex Instruction Set Computer )

Hazard
이렇게 보면 마냥 좋아보이지만… 해결해야 될 문제점이 한두가지가 아니다 !!
-
데이터 종속성
- C = A + B 를 실행 중인데 바로 뒤에 D = C + A 가 들어왔다 !!
- 이를 data hazard 라 한다
- 이를 회피하기 위해 forwarding이라는 기법이 사용됨
-
Control Hazard
- 분기 예측에 실패했을 경우 발생 !!
- 분기 예측이 무엇인가?
- if 문을 만나고 파이프라이닝이 쉬지 않고 진행되기 위해서는 다음 명령어를 예측해서 가져와야 함 !!
-
Structal Hazard

- 동시에 같은 메모리를 사용하는 경우 발생
- 이를 해결하기 위해 I/D 캐시로 나누었음 (하버드 아키텍처)
- 이러면 fetch에서는 I, mem 단계에서는 D 캐시에 접근하면 됨 !!