728x90
반응형

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

CPU가 한시도 쉬지 않고 명령어를 동시에 처리 하는 작동기법

명령어 병렬 처리기법(ILP; Instruction-Level Parallelism)이 있다.

대표적으로 3가지가 있다.

  1. 명령어 파이프 라이닝
  2. 슈퍼스칼라
  3. 비순차적 명령어 처리

 

명령어 파이프라인

명령어가 처리되는 전체 과정을 비슷한 시간 간격으로 나누어 보아야 명령어 파이프라인을 이해할 수 있다.

  1. 명령어 인출(Instruction Fetch)
  2. 명령어 해석(Instruction Decode)
  3. 명령어 실행(Execute Instruction)
  4. 결과 저장(Write back)

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

예로 한 명령어를 '인출'하는 동안에 다른 명령어를 '실행'할 수 있고

한 명령어가 '실행'된느 동안에 연산 결과를 '저장' 할 수 있다.

이처럼 명령어를 겹쳐서 수행하게 되면 하나하나 실행하는 것보다 훨씬 효율적이다.

마치 공장 생산 라인과 비슷해서 명령어 파이프라이닝(instruction pipelining)이라고 한다.

하지만 특정 상황에서는 성능 향상에 실패하는 경우가 있다.

이러한 상황을 파이프라인 위험(pipeline hazard)라고 부른다.

크게 데이터 위험, 제어 위험, 구조적 위험이 있다.

  • 데이터 위험(data hazard) - 명령어 간 '데이터 의존성'에 의해 발생합니다.
  • 제어 위험(control hazard) - '프로그램 카운터의 갑작스러운 변화'에 의해 발생
  • 구조적 위험(structural hazard) - 명령어들을 겹쳐 실행하는 과정에서 서로 다른 명령어가 동시에 CPU부품을 사용하려고 할 때 발생

 

슈퍼스칼라(superscalar)

오늘날 대부분의 CPU에서는 여러개의 파이프라인을 이용한다.

CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조를 슈퍼스칼라라고 한다.

슈퍼스칼라는 파이프라인이 공장 생산 라인을 한 개 두는 것이라면,

슈퍼스칼라는 여러 개 두는 것과 같다.

즉, 슈퍼스칼라는 여러개의 명령어 파이프라인을 두는 기법이다.

 

비순차적 명령어 처리(OoOE; Out-of-order execution)


이 기법은 많은 전공서에서 다루지 않지만 오늘날 CPU 성능 향상에 크게 기여한 기법이다.

대부분의 CPU가 차용한느 기법이라 알아두면 좋다.

명령어들을 순차적으로 실행하지 않는 기법이다.

명령어를 순차적으로 처리하게 되면 예상치 못한 상황에서 파이프라인이 멈춰버리게 된다.

하지만 명령어 중에서는 순차적으로 수행을 안해도 결과에 큰 영향을 미치지 않는 것들이 있다.

순서를 바꿔 실행해도 문제 없는 명령어들을 먼저 실행하여,

순차적으로 처리할 때보다 더 효율적으로 처리하기도 하며

명령어 파이프라인이 멈추는 것을 방지하는 기법을 뜻한다.

다시 말해 어떤 의존성이 없는 명령어가 있다고 가정한다면

두 명령어의 순서를 바꿔도 전체 프로그램의 실행 흐름에 영향이 없다면

굳이 순차적으로 처리를 안해도 된다.

다만 어떤 명령어들이 서로 데이터 의존성을 가지고 있는지, 갖고 있지 않은지

바꿔 실행할 수 있는 명령어에는 어떤 것들이 있는지 잘 판단할 수 있어야 한다.

 

요약

  • 명령어 파이프라이닝 - 동시에 여러 개의 명령어를 겹쳐 실행하는 기법
  • 슈퍼스칼라 - 여러 개의 명령어 파이프라인을 두는 기법
  • 비순차적 명령어 처리 기법 - 파이프라인의 중단을 방지하기 위해 명령어를 순차처리 하지 않는 기법
반응형

'컴퓨터공학(CS) 배우기 > 혼공 컴퓨터 구조 + 운영체제' 카테고리의 다른 글

[CS] CISC 와 RISC(CPU 마지막)  (1) 2023.04.12
[CS] CPU의 속도  (0) 2023.04.09
[CS] 인터럽트  (0) 2023.04.08
[CS] 명령어 사이클  (0) 2023.04.03
[CS] 레지스터  (0) 2023.04.02