Pipeline CPU(5)- Control Hazard

Pipeline-CPU 목차

세가지 주요 사항

  1. Data Hazard
  2. Control Hazard
  3. Branch Prediction

Control Hazard

앞서 Pipeline-CPU를 이해하는데 중요한 세가지 주요 사항들 중에서 Data Hazard와 그 해결 방법(Data Forwarding)에 대해 알아보았습니다. 이번 Post에서는 Control Hazard가 무엇인지에 대해서 알아봅시다.

Control HazardControl Flow와 관련된 문제입니다. Data Hazard레지스터들간의 Data Depedence와 관련된 문제였다면, Control Hazard는 어떤 PC 값을 읽어와서 Instruction을 수행할지에 대한 PC에 관한 Data dependence라고 이해할 수가 있습니다.

Pipeline-CPU가 실행되는 과정을 한 번 살펴봅시다. PC의 값으로 부터 해당 주소의 메모리에 든 Instruction 읽어 오고 그 읽어온 Instruction을 바탕으로 IF(Instruction Fetch) 단계를 거쳐서 ID(Instruction Decode) 단계에서 해당 Instruction이 JAL, JALR, Bxx와 같은 Control Flow Instruction인지 혹은 R/I-Type, LD, SD와 같은 다른 Instruction인지 구분을 해야합니다.

일반적인 R/I-Type의 Instruction의 예시로, ADD operator가 ID단계에서 확인이 되었다면 Next PC는 순차적으로 현재의 PC 바로 다음인 PC+4(word 가 4-Byte인 경우)가 될 것입니다.

하지만 JAL, Bxx와 같은 Control Flow Instruction인 경우는 어떨까요? 이 경우에는 ID 단계에서 바로 Next PC 값을 알 수가 없습니다. 이해를 돕기 위해 다음 예시를 살펴봅시다.

beq x1, x0, 16
// TSC_MANUAL 기준
if ($x1 == $x0) then $pc = $pc + (16+1)

위의 BEQ Instruction이 들어왔다고 가정하여 봅시다. 두 레지스터에 든 값이 같은지 여부를 확인해야 하므로 EX 단계에서 ALU를 거쳐 MEM단계가 되어서야 Next PC 값이 확정되게 됩니다.


지금까지 살펴보았던 Pipeline-CPU는 매 싸이클마다 연속적으로 새로운 Instruction이 알맞게 들어온다고 생각하였습니다.
하지만 위의 내용을 종합하여 볼 때 최소 ID 단계가 되어야만 Next PC를 결정지을 수 있으므로 PC Hazard가 발생하는 것입니다.
즉 PC Hazard distance는 최소 1(R/I-Type, LD, SD 인 경우)거나 3(Bxx, JAL, JALR 인 경우)이 발생하게 됩니다.

Control Hazard를 피하기 위한 방법: Stalling

따라서 Control Hazard를 피하기 위해서는 최소한 ID 단계는 되어야 Next PC 값을 결정지을 수 있으므로 매번 1 STALL을 필요로 하게 됩니다.


Feature1. Control Hazard Resolved by Stalling

하지만 Feature1에서 확인할 수 있듯이, 매번 1 STALL이 추가가 되게 된다면, CPU의 퍼포먼스는 반(i.e. IPC이 반으로 줄게됨)으로 줄어들게 됩니다.

그렇다면 Control Hazard를 해결하면서도 CPU의 성능 저하를 최소화 할 수 있는 방법은 없을까요? 그 해결방법이 다음 Post에서 중요하게 다뤄볼 Branch Prediction 입니다.


Post의 참고자료와 이미지의 출처는 아래와 같습니다.

Computer Organization and Design RISC-V edition
Computer Architecrue Lecture Note @ Carnegie Mellon University, University of, Michigan, Purdue University, University of Pennsylvania, University of Wisconsin and POSTECH.




2021 의 게시글

NMF

NMF 음수미포함 행렬분해

PCA, EVD

PCA 주성분 분석(차원 축소)

15989번 1,2,3 더하기 4(다이내믹 프로그래밍)

다이내믹 프로그래밍 방법이 필요한 문제들은 처음엔 접근 방법이 막막하게 느껴지곤 합니다. DP 접근 풀이가 필요한 관련 유형의 문제들을 많이 다뤄보도록 합시다.

10942번 펠린드롬(다이내믹 프로그래밍)

다이내믹 프로그래밍 방법이 필요한 문제들은 처음엔 접근 방법이 막막하게 느껴지곤 합니다. DP 접근 풀이가 필요한 관련 유형의 문제들을 많이 다뤄보도록 합시다.

12865번 평범한 배낭(다이내믹 프로그래밍)

다이내믹 프로그래밍 방법이 필요한 문제들은 처음엔 접근 방법이 막막하게 느껴지곤 합니다. DP 접근 풀이가 필요한 관련 유형의 문제들을 많이 다뤄 보도록 합시다.

11066번 파일 합치기(다이내믹 프로그래밍)

다이내믹 프로그래밍 방법이 필요한 문제들은 처음엔 접근 방법이 막막하게 느껴지곤 합니다. DP 접근 풀이가 필요한 관련 유형의 문제들을 많이 다뤄보도록 합시다.

2차원 배열 유형 문제

삼성역량테스트에서 출제되는 코테문제들의 경우 2차원 배열을 특정한 기준을 통해 회전시키는 문제가 자주 출제됩니다.

Introducing Python 파이썬 정리(2)

Introducing Python 처음 시작하는 파이썬[2판] 을 읽으면서, 몇 가지 헷갈리거나 새롭게 알게된 문법, 함수, 메소드들을 정리하려고 합니다.

Introducing Python 파이썬 정리(1)

Introducing Python 처음 시작하는 파이썬[2판] 을 읽으면서, 몇 가지 헷갈리거나 새롭게 알게된 문법, 함수, 메소드들을 정리하려고 합니다.

Pipeline CPU(5)- Control Hazard

Pipeline-CPU 목차 Pipeline CPU(1) : Single-Cycle vs Multi-Cycle CPU Pipeline CPU(2) : Pipeline-CPU의 간략한 이해 Pipeline CPU(3) : Data Hazard(RAW...

Pipeline CPU(4)- Data Forwarding

Pipeline-CPU 목차 Pipeline CPU(1) : Single-Cycle vs Multi-Cycle CPU Pipeline CPU(2) : Pipeline-CPU의 간략한 이해 Pipeline CPU(3) : Data Hazard(RAW...

Pipeline CPU(3)- Data Hazard

Pipeline-CPU 목차 Pipeline CPU(1) : Single-Cycle vs Multi-Cycle CPU Pipeline CPU(2) : Pipeline-CPU의 간략한 이해 Pipeline CPU(3) : Data Hazard(RAW...

맨 위로 이동 ↑