Machineboy空

CPU 성능 향상 ② 명령어 병렬 처리 기법 - 명령어 파이프라인(Instruction Pipeline), 슈퍼스칼라(Superscalar), 비순차적 명령어 처리(OOOE) 본문

Computer/CS

CPU 성능 향상 ② 명령어 병렬 처리 기법 - 명령어 파이프라인(Instruction Pipeline), 슈퍼스칼라(Superscalar), 비순차적 명령어 처리(OOOE)

안녕도라 2024. 1. 5. 15:53

CPU가 시간 낭비 없이 메모리들에 있는 명령어들을 빠르게 처리하는 방법

 


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

 

동시에 여러 개의 명령어를 겹쳐 실행하는 기법

 

 

Pipeline Hazard

항상 이상적으로 작동하는 것은 아님. 실패하는 경우도 있다.

 

데이터 위험
(Data hazard)
명령어 간의 의존성에 의해 야기
모든 명령어를 동시에 처리할 수는 없다
이전 명령어를 끝까지 실행해야만 비로소 실행할 수 있는 경우

명령어 2를 해석하는 동안 명령어 1을 인출할 수 없다
명령어 1이 R2 + R3의 값으로 업데이트된 뒤에 명령어 2를 인출해야하니까
제어 위험
(Control hazard)
프로그램 카운터의 갑작스러운 변화(순차적 흐름이 아닌 특정 메모리 주소로 변화)로 파이프라이닝이 성능 향상에 실패하는 것

ex) 순차적 실행이 아닌 Jump 60
분기 예측(branch prediction): 미리 예측하는 것도 있긴 함.
구조적 위험
(Structural hazard)
서로 다른 명령어가 같은 CPU부품(ALU, 레지스터)를 쓰려고 할 때 나타나는 위험

 


2) 슈퍼스칼라 (Superscalar Processor)

 

단일 파이프라이닝의 위험성으로 아예 파이프라인이 늘어남

오늘날의 멀티스레드 프로세서


3) 비순차적 명령어 처리 (Out of order execution, OOOE)

 

파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 명령어 병렬 처리 기법

 

의존성이 없는 명령어의 순서를 바꾸는 것만으로 파이프라인의 중단을 멈출 수 있다.

 

아무 명령어나 순서를 바꿀 수 없음. 

비 순차적 명령어처리(OOOE)를 지원하는 CPU의 경우 알아서 계산해서 처리해준다.