반응형

명령어 병렬 처리 기법

 

15 - CPU 성능을 향상하는 방법 - 1

빠른 CPU를 위한 설계 방법 11 - 컴퓨터에서 제어장치의 입출력값 컴퓨터에서 제어장치의 입출력값 03 - 컴퓨터의 핵심 부품 컴퓨터의 4가지 핵심 부품 컴퓨터 구조 지식 중 또 다른 하나는 컴퓨터

jschan0911.tistory.com

지난 게시물에서는

CPU 성능을 향상시키는 방법 중

CPU를 빠르게 설계하는 법을

소개하였다.

 

물론 기술적으로 성능을

높이는 방법도 있겠지만,

이미 있는 부품을 최대한

효율적으로 사용하는 방법도 있을 것이다.

 

이처럼 CPU가 놀지 않고

시간을 알뜰하게 쓰면서 작동하도록

만드는 방법'명령어 병렬 처리 기법'

(ILP: Instruction-Level-Parallelism)이라 한다.

 

명령어 파이프라이닝

명령어 병렬 처리 기법 중 하나로

명령어 파이프라이닝이 있다.

 

명령어 파이프라이닝이란,

명령어들을 동시에 처리하는 기법을 의미한다.

 

출처: 기글 하드웨어 위키

이때, 명령어 처리 과정인

명령어 인출 - 해석 - 실행 - 결과 저장 중에서

단계가 겹치지 않는 명령어들끼리만

동시에 처리할 수 있다.

 

명령어의 처리 흐름이 끊이지 않도록 하여

마치 수도관에 흐르는 물처럼

끊임없이 명령어가 처리된다고 하여

pipelining이라는 이름이 붙었다.

 

이 기법의 장점은 높은 성능이지만,

성능 향상에 실패하는 경우가 있다.

 

이러한 경우를 파이프라인 위험이라고 한다.

 

파이프라인 위험 종류 설명
데이터 위험 명령어 간의 데이터 의존성에 의해 발생
(예: 명령어에 필요한 인자가 생성 혹은 계산되지 않았을 때)
제어 위험 분기로 인한 프로그램 카운터의 갑작스러운 변화에 의해 발생
이에 대한 해결책으로 '분기 예측'기술 사용
구조적 위험 서로 다른 명령어가 동시에 ALU, 레지스터와 같은 CPU 부품을 사용하려 할 때 발생
자원 위험이라고 부르기도 함

분기한다: 연속적으로 가지 않고 다른 곳으로 간다.

 

슈퍼스칼라 기법

명령어 병렬 처리 기법 중

또 다른 하나로 슈퍼스칼라 기법이 있다.

 

슈퍼스칼라 기법이란,

파이프라이닝에서 사용하는

파이프라인을 여러 개 두어

명령어들을 처리하는 기법이다.

 

이론적으로는 파이프라인 개수에 비례하여

처리 속도가 빨라지지만,

예기치 못한 문제들에 의해

실제로 비례하지는 않는다.

 

비순차적 명령어 처리

명령어 병렬 처리 기법 중

또 다른 하나로

비순차적 명령어 처리 기법이 있다.

 

이는 OoOE(Out-of-Order Execution)

으로 줄여서 부르며, 이 책에서는

명령어의 합법적 새치기라고도 표현된다.

// 데이터 의존성 문제가 없는 경우
int a = 8;
int b = 10 * 4;
int c = 200 % 2;

// 데이터 의존성 문제가 발생하는 경우
int a = 8;
int b = 10 * c;	// Error
int c = 200 % 2;

위와 같이 명령어에서

쓰이는 데이터가 생성, 계산되기도 전에

데이터를 사용하는 경우 발생하는

데이터 의존성 문제만 없다면

모든 명령어를 순차적으로 처리할

의무는 없다.

 

오히려 비순차적으로 수행함으로 인해

오류를 만났을 때 전체 파이프라인을

멈출 필요가 없기 때문에

더 효율적인 경우가 있다.

 

이렇듯,

명령어의 처리 순서를 바꾸어 실행함으로

파이프라인이 멈추는 것을 방지하는 기법을

비순차적 명령어 처리 기법이라 한다.

반응형

+ Recent posts