본문 바로가기
[혼자 공부하는 컴퓨터구조 + 운영체제]

[컴퓨터 구조] 5-2. 효율적인 CPU를 위한 설계 기법 - 명령어 병렬 처리 기법

by haeyoon 2024. 5. 2.

CPU가 놀지 않고 시간을 알뜰하게 쓰며 작동하는 것이 중요하다.

 = "명령어 병렬 처리 기법"을 사용해야한다

 

명령어 처리기법에는 명령어 파이프라이닝, 슈퍼스칼라, 비순차적 명령어 처리가 있다. 각 방법들에 대해 알아보자


 

1. 명령어 파이프라인

* 명령어 파이프라이닝

명령어들을 명령어 파이프라인에 넣고 동시에 처리하는 기법

 

명령어 처리 과정을 클럭 단위로 나누어 보면

  • 명령어 인출
  • 명령어 해석
  • 명령어 실행
  • 결과 저장

같은 단계가 겹치지만 않는다면 CPU는 각 단계를 동시에 실행할 수 있다.

 

명령어를 겹쳐서 수행

if) 명령어 파이프라인을 사용하지 않는 경우

 

* 파이프라인 위험

성능향상에 실패하는경우

1) 데이터 위험

명령어간 데이터 의존성에 의해 발생

이전 명령어를 끝까지 실행해야만 실행할 수 있는 경우에 발생한다

ex) 명령어 1: r1 = r2 + r3

      명령어 2: r4 = r1 + r5

이 경우 명령어 1을 모두 완료한 뒤 명령어 2를 수행해야 한다.

 

2) 제어 위험

프로그램 카운터는 주로 '현재 실행중인 명령어의 다음주소'로 갱신되는데, 분기 등으로 인한 프로그램 카운터의 갑작스러운 변화에 의해 발생

ex) 분기로 인해 "다음에 명령어 60을 수행해라"로 건너뛰는 경우

파이프라인에 미리 가지고 와서 처리중이던 명령어가 쓸모없어짐

분기예측 사용

 

3) 구조적 위험(자원 위험)

명령어를 겹쳐 실행하는 과정에서 서로 다른 명령어가 동시에 CPU 부품을 사용하려 할 때 발생

 


2.  슈퍼 스칼라

CPU내에 여러개의 명령어 파이프라인을 포함한 구조

* 슈퍼스칼라 프로세서 (슈퍼 스칼라 CPU)

슈퍼스칼라 구조로 명령어 처리가 가능한 CPU

 - 매 클럭 주기마다 동시에 명령어를 인출. 실행할 수 있음

 - 이론적으로 파이프라인 개수에 비례해 프로그램 속도가 빨라진다 (예외: 파이프라인 위험)


3. 비순차적 명령어 처리(OoOE)

명령어들을 순차적으로 실행하지 않는 기법 (명령어의 합법적 새치기)

 

EX)

기존: 3번을 실행하기 위해서는 1,2번이 실행이 완료되어야 했기 때문에 3번 실행이 시작되고 순차적으로 실행되어야했던 4,5,6번도 늦게 실행 시작

변경 후: 4,5,6번은 1,2번과 상관없이 실행할 수 있는 명령어이기 때문에 3번과 순서를 바꿔 실행하면 모든 명령어를 더 짧은 시간 내에 실행할 수 있다.