Hazard

Heejin·2023년 5월 29일
0

Hazard는 컴퓨터 아키텍처에서 발생하는 명령어 실행의 장애나 지연을 의미하며, 파이프라인(CPU 파이프라인)은 명령어 처리를 여러 단계로 분할하여 동시에 여러 명령어를 처리하는 기술이다. 하지만 파이프라인에서는 몇 가지 상황에서 명령어 실행에 문제가 발생할 수 있다.

  1. 구조적 장애(Structural Hazard): 파이프라인에서는 여러 단계의 처리를 위해 하드웨어 자원을 공유한다. 이로 인해 하나의 단계에서 사용 중인 자원이 다른 단계에서 필요한 경우, 구조적 장애가 발생할 수 있다. 예를 들어, 하나의 명령어가 메모리를 접근하는 동안 다른 명령어가 같은 메모리를 사용하려고 할 때 구조적 장애가 발생한다.

  2. 데이터 종속성(Data Hazard): 한 명령어의 실행 결과가 다른 명령어의 실행에 영향을 주는 경우, 데이터 종속성 문제가 발생한다. 데이터 종속성은 세 가지 유형으로 나뉜다.

    • RAW (Read After Write): 한 명령어가 데이터를 읽기 전에 다른 명령어가 같은 데이터를 쓰는 경우 발생한다.
    • WAR (Write After Read): 한 명령어가 데이터를 쓰기 전에 다른 명령어가 같은 데이터를 읽는 경우 발생한다.
    • WAW (Write After Write): 한 명령어가 데이터를 쓰기 전에 다른 명령어가 같은 데이터를 쓰는 경우 발생한다.
  3. 제어 종속성(Control Hazard): 분기 명령어가 조건에 따라 프로그램 흐름을 변경하는 경우, 파이프라인의 이전 단계에서는 분기 결과를 알 수 없다. 이로 인해 분기 명령어 이후에 파이프라인에 대기해야 하는 상황이 발생하며, 이를 제어 종속성이라고 한다.

이러한 Hazard는 파이프라인의 성능을 저하시킬 수 있으며, 이를 해결하기 위해 다양한 기법이 사용된다. 예를 들어, 파이프라인 내에 명령어 실행 순서를 재배치하여 데이터 종속성을 해결하는 Out-of-Order Execution, 분기 예측 등의 기법이 사용될 수 있다.

0개의 댓글