본문 바로가기
IT기술노트/컴퓨터구조 및 운영체제

파이프라인 해저드

by 비트코기 2021. 3. 12.

I. 파이프라인 명령어 의존성 발생, 파이프라인 해저드의 개요

가. 파이프라인 해저드의 정의

   - 파이프라인 프로세서에서 명령어 의존성(데이터, 컨트롤, 구조)을 발생시킬 수 있는 문제


II. 파이프라인 해저드의 종류

종류

특징

설명

구조적 해저드

(Structural hazards)

H/W 자원 충돌

- 하드웨어가 여러 명령들의 수행을 지원하지 않기 때문에 발생, 자원충돌 (Resource Conflicts)

데이터 해저드

(Data hazards)

선행/후행 명령어

- 명령의 값이 현재 파이프라인에서 수행 중인 이전 명령의 값에 종속 (세부적으로 RAW, WAR, WAW 해저드가 있음. RAR은 해저드가 아님)

제어 해저드

(Control Hazards)

분기 명령

- 분기(Jump, Branch ) 명령어에 의해서 발생

- 분기를 결정된 시점에, 잘못된 명령이 파이프라인에 있기 때문에 발생


III. 구조적 해저드의 개요

가. 구조적 해저드의 개념

- 구조적 해저드는 하드웨어가 동시에 여러 명령 수행을 지원하지 않기 때문에 발생하는 자원 충돌 현상

나. 구조적 해저드 제거방법

구분

설명

비고

하드웨어/리소스 추가

- 리소스 혹은 하드웨어를 추가하여, 메모리에 동시에 접근함으로써 해결

H/W 병렬 구성

하바드 아키텍처 사용

- 데이터와 명령어를 각각의 메모리에 분리하여 메모리 동시 접근

데이터와 명령어 메모리 분리

메모리 인터리빙

- 메모리 모듈별로 병렬 접근을 수행하여 메모리 동시접근

인터리빙 통한 H/W 병렬구성

지연

- nop 명령어를 추가하여, 파이프라인 수행을 일시정지

nop 명령어 수행


IV. 데이터 해저드의 개요

가. 데이터 해저드의 개념

- 데이터 해저드는 명령이 현재 파이프라인에서 수행중인 명령어가 이전 명령어의 결과에 종속되는 경우에 발생

- RAW(Read after Write)의 경우, 첫번째 파이프라인의 R1 쓰기 동작이 완료된 후에 두번째 파이프라인의 R1 읽기 동작이 가능

나. 데이터 해저드 제거방법

구분

설명

비고

전방전달

- 레지스터 파일에 반영되기 전에 수행(EX) 단계에서 계산된 결과를 다음 인스트럭션의 수행단계로 전달

H/W 추가 필요

지연

- 컴파일러 수준에서 해저드 발견하고, no-operation 명령어 삽입

Nop 명령어 삽입

비순차 실행

- 접근 중인 데이터와 관련 없는 명령어를 삽입하여 실행

- 이후 레지스터를 바이패스 한다.

컴파일러 수준에서 코드 실행 변경

프로그래밍

방식

- 변수를 늘리거나, 계산이 완료된 후 한번에 실행하는 방식으로, 데이터 해저드를 최소화

레지스터 고려하여 프로그래밍


V. 제어 해저드의 개요

가. 제어 해저드의 개념

- 제어 해저드는 jump와 같은 분기 명령, branch 명령에 의해 발생하는 해저드를 의미

나.  제어 해저드 제거방법

구분

설명

비고

분기예측

- 명령이 분기하는지를 미리 예측하여, 명령을 변화시키는 방법으로 지연이 발생하지 않도록 하는 기술

정적예측

동적예측

브랜치 지연

- 컴파일러가 분기문 발견 시, nop 혹은 분기와 관련 없는 명령을 추가하도록 프로그램 순서를 재배치

비순차 실행과 유사

프로그래밍

방식

- 조건분기를 최소화하도록 프로그래밍하여 제어 해저드를 최소화

Inline 메소드 사용

Loop unrolling 사용

 

 

반응형

댓글