명령어 병렬 처리 기법

.·2023년 12월 28일

computer-architecture

목록 보기
6/10

목차

  • 명령어 파이프라인
  • 슈퍼스칼라
  • 비순차적 명령어 처리

명령어가 처리되는 과정을 비슷한 시간 간격으로 나누면 ?

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

명령어 파이프라인

같은 단계만 겹치지만 않는다면 CPU는 '각 단계를 동시에 실행할 수 있다'
이렇게 명령어를 동시에 겹치지 않고 병렬로 처리하는 것을 명령어 파이프 라인이라고 한다.

만약 명령어 파이프라인을 사용하지 않았다면 ?

아래의 그림처럼 CPU를 굉장히 비효율적으로 사용한다.

파이프라인 위험

파이프 라인 위험 : 명령어 파이프라인이 성능 향상에 실패하는 경우
즉 병렬로 명령어를 처리할 수 없는 경우도 있다.

파이프라인 위험 - 1. 데이터 위험

데이터 위험 : 명령어 간의 의존성에 의해 일어남

아래 그림처럼 두 명령어 사이에 의존성이 있다면 동시에 처리할 수는 없다
(이전 명령어를 끝까지 실행해야만 비로소 실행할 수 있는 경우)

파이프라인 위험 - 2. 제어 위험

제어 위험 : 프로그램 카운터의 갑작스러운 변화

아래 그림의 예로 들면

  • 만약 10번지 명령어를 실행하다가 갑자기 다음 실행 프로그램은 60번지에 있는 명령어로 실행해야하는 경우는 병렬로 수행하고 있는 11번지, 12번는 명령어들은 헛수고한 것이다.
  • 이러한 상황을 방지하기 위해 프로그램 카운터가 어느 번지로 점프할 것인지를 미리 예측하는 기술도 있다. (=branch prediction, 분기예측)

즉 프로그램 카운터가 갑작스럽게 변화되는 상황에서 파이프라인이 성능향상에 실패하는 경우는 제어위험이라고 한다.

파이프라인 위험 - 3. 구조 위험

구조 위험 : 서로 다른 명령어가 같은 CPU 부품(ALU, 레지스터)를 쓰려고 할 때 발생


슈퍼스칼라

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

즉 8코어 16 쓰레드 CPU 라고 한다면 한번에 16개의 명령어를 가지고 와서 해석하고 실행할 수 있는 있는 CPU 이다.

즉 아래 그림의 명령어 1, 2 가 동시에 실행되듯이 8코어 16쓰레드는 16개의 명령어가 동시에 실행된다.

이론적으로는 파이프라인 개수에 비례하여 처리 속도가 증가하지만
그러나 파이프라인 위험도의 증가로 인해
파이프라인 개수에 비례하여 처리속도가 증가하진 않음


비순차적 명령어 처리

(out-of-order execution, 줄여서 OoOE)

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

profile
.

0개의 댓글