콤퓨타

[컴퓨터구조] CPU의 구조와 기능 - 2

찹쌀동수육 2021. 11. 8. 16:36

3. 명령어 파이프라이닝 ( Instruction Pipelining )

 - CPU의 프로그램 처리 속도를 높이기 위해서 CPU 내부 하드웨어를 여러 단계로 나누어 처리하는 기술

 

 - 2단계 명령어 파이프라인 ( Two-stage Instruction Pipeline )

  = 명령어를 실행하는 하드웨어를 인출단계와 실행단계로 나누어 2개의 독립적인 파이프라인으로 분리하여 처리

  = 2개의 단계에 동일한 클록을 가해서 동작 시간을 일치시키면 첫 클록주기에서 인출 단계가 첫 명령어 인출,

     두 번째 클록주기에서 인출된 명령어가 실행 단계로 보내어 실행, 동시에 인출 단계는 두번째 명령어 인출

2단계 명령어 파이프라인의 실행을 클록 주기에 따라 그린 그림.

  = 클록 주기 1에서 명령어를 인출하고, 클록 주기 2에서 명령어 실행과 다음 명령어 인출을 동시에 진행

  = 그러므로 명령어 처리 속도가 2배로 향상되는 결과를 얻을 수 있다.

  = 그러나 두 단계의 처리 시간이 동일하여야 가능한 결과이며, 동일하지 않는 경우 2배의 속도 향상을 얻지 못하며 파이프라인의 효율이 떨어지는 결과를 얻게된다.

   => 파이프라인 단계를 증가시켜 각 단계의 처리 시간을 같게 만들어 줌으로 전체적인 속도 향상을 얻을 수 있음.

 

 

- 4단계 명령어 파이프라인 ( Four-stage Instruction Pipeline )

  = 명령어 인출, 명령어 해독, Operand 인출, 명령어 실행의 단계로 나누어 구성한다.

      명령어 인출 ( IF : Intruction Fetch ) 단계 : 다음 명령어를 기억장치에서 인출하는 단계

      명령어 해독 ( ID : Instrcution Decode ) 단계 : Decoder(해독기)를 이용하여 명령어를 해석하는 단계

      Operand 인출 ( OF : Operand Fetch ) 단계 : 기억장치에서 Operand를 인출하는 단계

      명령어 실행 ( EX : Excution ) 단계 : 지정된 연산을 수행하는 단계

 

 

4단계 명령어 파이프라인의 실행을 클록 주기에 따라 그린 그림.

  = 2단계 파이프라인에서 예측되는 단점을 극복하기 위해서 단계를 나누어 속도향상을 얻기위해 만들어진 파이프라인.

  = 2단계 파이프라인과 동일한 방법으로 진행됨.

 

 

- 파이프라인에 의한 전체 명령어 실행 시간

 = 파이프라인에 의한 전체 명령어 시간 ( T )

  = 파이프라인의 단계 수 = k , 실행할 명령어의 개수 = N

각 파이프라인 단계가 1클럭주기씩 필요로 한다면?

T = k + ( N - 1 )

     

   = 첫번째 명령어를 실행하는 시간은 k 주기, 전체 명령어 N 개에서 첫번째 명령어를 뺀  (N - 1)개의 명령어는 각각 1개의 주기를 사용한다.

파이프라인이 되지 않고 N개의 명령어를 실행한다면?

T = k * N

 

 

- 파이프라인에 의한 속도향상

 = 파이프라인에 따른 속도향상은 어떻게 알 수 있을까

  = 파이프라인이 되지 않고 N개의 명령어를 실행한 시간을 각 단계가 1클럭 주기씩 필요로하는 명령어 실행 시간으 나누어주면 된다.

T1은 파이프라인이 되지 않고 N개의 명령어를 실행하는 시간

Tk는 k개의 파이프라인이 N개의 명령어를 실행하는 시간

 

 

- 파이프라인의 효율 저하 요인

= 모든 명령어가 파이프라인 단계를 모두 거쳐가지 않는 경우

  = 명령어가 오퍼랜드를 인출할 필요가 없어도, 파이프라인의 하드웨어를 단순화시키기 위해서 단계를 모두 통과시킨다.

 = 파이프라인의 클록은 처리 시간이 가장 오래 소모되는 단계를 기준으로 결정한다.

 = IF 단계와 OF 단계가 동시에 기억장치 접근을 시도할때 기억장치 충돌이 발생하면 지연이 발생되는 경우.

 = 조건 분기 명령어가 실행될 때, 미리 인출하여 처리하던 명령어들이 무효화 되는 경우.

 

- 분기 발생에 의한 성능 저하 최소화

= 분기 예측 ( Branch Prediction )

   : 분기가 일어날지를 예측하여 명령어를 인출하는 확률적인 방법이다. 

   : 분기 역사표 ( Branch History Table )를 이용하여 최근의 분기 결과를 참조하여 성능 저하를 최소화한다.

= 분기 목적지 선인출 ( Prefectch Branch Target )

   : 조건분기가 인식되었을 때, 분기 명령어의 다음 명령어와 분기의 목적지명령어를 같이 인출하여 실행하는 방법이다. 

= 루프 버퍼 ( Loop Buffer ) 사용

   : 파이프라인의 명령어 인출 단계에 포함되어 있는 기억장치인 루프 버퍼에 최근에 인출된 n개의 명령어를 저장하는  방법이다.

= 지연 분기 ( Delayed Branch ) 

   : 분기 명령어의 위치를 재배치하여 파이프라인의 성능을 개선하는 방법이다.