본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

파이프라인 해저드(Pipeline Hazard)는 명령어 파이프라인에서 다음 명령어가 정해진 클록 사이클에 다음 단계로 진행하지 못하게 막는 상황으로, 구조적 해저드·데이터 해저드·제어 해저드의 세 종류로 나눈다.

명령어 파이프라인은 인출(IF), 해독(ID), 실행(EX), 메모리 접근(MEM), 결과 저장(WB) 같은 단계를 겹쳐 실행해 이상적으로는 한 사이클에 명령어 하나를 끝낸다(→ CPU 병렬 처리, 명령당 사이클 수). 그러나 명령어들이 같은 하드웨어를 동시에 쓰려 하거나, 앞 명령어의 결과가 아직 나오지 않았거나, 다음에 무엇을 인출할지 분기 결과를 아직 모르면 뒤 명령어를 멈추게(stall) 해야 한다. 이렇게 파이프라인 때문에 드러나는 명령어 사이의 의존과 충돌을 해저드라 한다. 스탠퍼드 대학교 EE108b 강의는 해저드를 파이프라인이 효율을 잃게 만드는 명령어 간 의존으로 설명하고, 구조적 해저드(자원 충돌), 데이터 해저드, 제어 해저드 셋으로 나눈다.[1]

종류 원인 예 주된 해결 방법
구조적 해저드(structural hazard) 두 명령어가 같은 하드웨어 자원을 같은 사이클에 쓰려 한다(자원 충돌) 메모리가 하나뿐인데 한 명령어는 데이터를 읽고 다른 명령어는 명령어를 인출해야 하는 경우 자원을 늘리거나 나눈다(명령어 메모리·데이터 메모리 또는 캐시 분리, 레지스터 파일 포트 추가), 아니면 한쪽을 멈춘다
데이터 해저드(data hazard) 뒤 명령어가 아직 파이프라인 안에 있는 앞 명령어의 결과를 필요로 한다 ADD R1, R2, R3 바로 뒤에 SUB R4, R1, R5 가 R1 을 읽는 경우 전방 전달(forwarding, bypassing)로 결과를 레지스터에 쓰기 전에 다음 단계로 넘긴다. 적재(load) 결과처럼 전달로도 늦으면 한 사이클 멈춘다. 컴파일러의 명령어 재배치
제어 해저드(control hazard, 분기 해저드) 분기·점프 명령어의 결과가 나오기 전에는 다음에 인출할 명령어를 정할 수 없다 조건 분기 BEQ 의 비교 결과가 EX 단계에서야 나오는 경우 결과가 나올 때까지 멈춤, 분기 예측(분기하지 않음 예측, 분기 목표 버퍼, 2비트 예측기), 지연 분기
  • 스탠퍼드 강의는 초기 RISC 가 RAW 데이터 해저드를 전방 전달로 풀고 적재 결과만 적재 지연과 멈춤으로 처리했으며, 제어 해저드는 지연 분기로 다루었다고 정리한다.[1] 분기 결과를 기다리면 분기 명령어의 CPI 가 3 정도로 커지므로 대부분의 프로세서가 분기 예측을 쓴다.[1]
  • UMBC CMSC 411 강의도 데이터 전방 전달, 파이프라인 멈춤, 분기 예측기를 해저드의 세 대책으로 다룬다.[2]

데이터 해저드의 세부 유형

편집 원본 편집

두 명령어 i(앞)와 j(뒤)가 같은 레지스터나 메모리 위치를 쓰는 순서에 따라 나눈다.

  • RAW(Read After Write, 진짜 의존) - j 가 i 가 쓴 값을 읽어야 한다. 순서대로 실행하는 단순 파이프라인에서 실제로 생기는 해저드이다
  • WAR(Write After Read, 반의존) - j 가 i 가 읽기 전에 그 위치에 써 버리면 i 가 틀린 값을 읽는다
  • WAW(Write After Write, 출력 의존) - j 의 쓰기가 i 의 쓰기보다 먼저 끝나면 최종 값이 틀어진다

WAR 와 WAW 는 이름만 겹치는 의존이라, 명령어 순서를 바꿔 실행하는(비순차 실행) 프로세서에서 문제가 되고 레지스터 재명명(register renaming)으로 없앤다.

해저드와 구별하기

편집 원본 편집
  • 해저드의 일반적 분류는 구조적·데이터·제어의 셋뿐이다. '레지스터 해저드'라는 별도 종류는 없다. 레지스터 값을 두고 생기는 충돌은 데이터 해저드(RAW·WAR·WAW)에 들고, 레지스터 파일 포트가 모자라 동시에 읽고 쓰지 못하는 것은 구조적 해저드에 든다
  • 전방 전달은 데이터 해저드의 대책이고, 분기 예측은 제어 해저드의 대책이다. 구조적 해저드는 자원을 늘려야 근본적으로 없어진다
  • 해저드로 생긴 멈춤 사이클은 CPI 를 1 보다 크게 만든다. 슈퍼스칼라처럼 한 사이클에 여러 명령어를 내보내면 같은 사이클에 충돌할 명령어 쌍이 늘어 해저드 처리가 더 복잡해진다
  • 디지털 회로에서 입력이 바뀌는 순간 출력이 잠깐 튀는 글리치를 일으키는 회로 구조도 해저드라 부르지만, 파이프라인 해저드와는 다른 개념이다
  1. ↑ 1.0 1.1 1.2 C. Kozyrakis, 「EE 108b Lecture 10: Control Hazards and Advanced Pipelining」, Stanford University, https://web.stanford.edu/class/archive/ee/ee108b/ee108b.1082/handouts/lect.10.PipelineHazards2.pdf, 확인일: 2026-11-04.
  2. ↑ Jason Tang, 「Lecture 17: Pipeline Hazards」, UMBC CMSC 411 Computer Architecture, 2024, https://userpages.cs.umbc.edu/jtang/cs411.s24/lectures/L17PipelineHazards.pdf, 확인일: 2026-11-04.