3. 명령어 파이프라이닝 ( Instruction Pipelining )
- CPU의 프로그램 처리 속도를 높이기 위해서 CPU 내부 하드웨어를 여러 단계로 나누어 처리하는 기술
- 2단계 명령어 파이프라인 ( Two-stage Instruction Pipeline )
= 명령어를 실행하는 하드웨어를 인출단계와 실행단계로 나누어 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 ) 단계 : 지정된 연산을 수행하는 단계
= 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 )
: 분기 명령어의 위치를 재배치하여 파이프라인의 성능을 개선하는 방법이다.
'콤퓨타' 카테고리의 다른 글
[Jump to Java] 필기 - 1 (0) | 2023.01.03 |
---|---|
[컴퓨터구조] 제어 유닛 (0) | 2021.12.18 |
[컴퓨터구조] CPU의 구조와 기능 - 3 (0) | 2021.12.16 |
[컴퓨터구조] CPU의 구조와 기능 - 1 (0) | 2021.11.01 |
[컴퓨터구조] 컴퓨터의 구성 (0) | 2021.04.05 |