Skip to main content

파이프라이닝


파이프라이닝(Pipelining)이란?


파이프라이닝이란 명령어를 순차적으로 실행하는 프로세서에 적용되는 기술로, 한 번에 하나의 명령어만 실행하는 것이 아니라 하나의 명령어가 실행되는 도중에 다른 명령어의 실행을 시작하는 식으로 동시에 여러개의 명령어를 실행하는 기법이다.


파이프라이닝을 다음과 같은 세탁소의 빨래 과정으로 설명해본다.

1. 빨래를 세탁기에 넣는다.
2. 세탁기를 동작시킨다.
3. 건조기를 동작시킨다.
4. 빨래를 갠다.

순차적처리 (단일사이클)의 경우 위의 과정을 다음과 같이 처리 할 것이다.

한 사이클이 끝나기전까지 다음 과정이 시작하지 않으며 4번의 세탁에 총 8시간이 소요된다.


위 세탁과정을 파이프라이닝을 사용해서 나타내본다면 다음과 같다.

한 사이클이 실행되는 동시에 다른 과정을 실행하면서 동시에 여러 세탁 과정을 거치게 되었고, 4번의 세탁과정에 총 3시간 30분이 소요되었다.


이처럼 파이프라이닝의 핵심은 동시에 여러 개의 명령어를 처리함으로써 처리량을 올리는 것이며, 이것은 기존 동작 속도대로 일을 하면서 처리량을 늘리는 것이지 기존 동작 속도를 단축시키는 것은 아니다.


파이프라인 조건

파이프라인이 가장 효율적이기 위한 조건은 다음과 같다

  • 각 단계별 처리 시간이 일정 해야한다
  • 각 명령의 처리 단계는 균일 해야한다


파이프라인 해저드 (Pipeline Hazard)


파이프라인의 명령어 실행 지속이 불가해서 지정된 클럭에서 수행되는 파이프라인이 지연,중지되는 현상파이프라인 해저드 라고 한다.

또한 파이프라인 해저드는 다음과 같은 개념을 포함한다.

  • 파이프라인 프로세서에서 명령어 의존성(데이터,컨트롤,자원)을 발생 시킬 수 있는 문제
  • 파이프라인의 성능을 저해하는 요인
  • CPI(명령어 당 실행 클럭 수)가 1이 되는 것을 방해하는 요소

파이프라인 해저드의 종류


파이프라인 해저드에는 구조적 해저드, 데이터 해저드, 제어 해저드의 세 가지 종류가 존재한다.


1) 구조적 해저드

  • 프로세서의 자원이 부족할 때 발생한다
  • 위처럼 명령어 2에서 실행하기가 1쿨럭에 안끝날 경우 , 명령어 3에서 결과쓰기 수행할 때 멈춤(stall)이 발생한다
  • 또한 명령어 4는 해석하기 단계가 필요없는 명령어인데, 실행하기를 수행하려고 할 시 명령어 3에서 실행하기가 이미 수행되고 있어 멈춤(stall)이 발생하게 된다
  • 구조적 해저드를 해결하기 위해서 stall,bubble등의 delay instruction을 사용한다.

2) 데이터 해저드

  • 이전 명령어의 결과를 기반으로 다음 명령이 수행될 때 파이프라인이 지연되는 경우 일어난다.
  • 데이터 해저드를 해결하기 위해서 전방전달(forwarding) 혹은 우회전달(bypassing) 등의 방법을 사용한다. 이는 별도의 하드웨어를 추가해서 정상적으로 얻을 수 없는 값을 내부 자원으로 부터 일찍 받아오는 것이다.

3) 제어 해저드

  • 다른 명령어들이 실행 중에 한 명령어의 결과 값에 기반을 둔 결정을 할 때 일어난다.
  • 제어 해저드는 지연,예측,분기 지연(delayed branch) 등의 방법으로 해결한다.


면접에 나올 수 있는 질문


Q. 파이프라이닝이란?

A. 하나의 명령어가 실행되는 도중에 다른 명령어의 실행을 시작하는 식으로 동시에 여러개의 명령어를 실행하는 기법


Q. 파이프라이닝을 사용하면 동작 속도의 단축을 기대 할 수 있는가?

A. 파이프라이닝은 기존 동작 속도를 유지한 채 처리량을 늘리는 기법으로 기존 동작 속도를 단축시킬 수 없다.


Q. 파이프라이닝에서의 데이터 해저드와 제어 해저드의 차이점

A. 데이터 해저드는 이전 명령어의 전체 결과를, 제어 해저드는 이전 명령어의 실행 중 한 명령어의 결과를 기반으로 하는 차이점이 있다.



참고




기여자



Jongminfire

📦