[컴퓨터 구조] MIPS Pipeline 개념 설명

November 13, 2023


Pipelining

pipelining laundry

빨래를 하는 과정이 4단계로 나누어져 있다고 가정합시다.

이를 순차적으로 수행하면, 한 빨래가 마무리되면 다음 빨래를 수행합니다.

그런데 이를 순차적으로 수행하지 않고, 각 단계별로 나누어 병렬적으로 실행할 수 있습니다.

5 Stages of Load Instruction

pipelining

Load 명령어인 lw의 경우, 앞서 배운 내용을 바탕으로 5단계로 나눌 수 있습니다.

Stage 설명
IF Instruction Fetch and Update PC
Dec(ID) Instruction Decode and Registers Fetch
Exec Execute R-type; calculate memory address
Mem Read/write the data from/to the Data Memory
WB Write the result data into the register file

lw 명령어를 5 단계로 나누어 실행함으로써 실행속도를 5배 빠르게 할 수 있습니다.

  • 여러 lw 명령어 실행시 성능 확인

Pipeline performance

Pipeline performance

각 단계롤 나누어 명령을 수행하고 있습니다. 그런데 Clock-Cycle은 가장 느린 IF 단계인 200ps 만큼에 맞춰져 있습니다.

MIPS 프로세서의 경우, 각 명령어가 끝나기 전에 다음 명령어를 실행합니다.

  • throughput을 증가
  • latency는 줄어들지 않음 → 오히려 pipeline overhead로 인해 소폭 증가할 수도 있습니다.

MIPS processor

sw 명령어는 레지스터의 값을 메모리에 저장하므로 WB 단계가 필요없습니다.

그리고 R-포맷의 경우, Mem 단계에서 메모리의 값을 읽거나 쓰기 작업을 할 필요가 없습니다.

이렇게 아무 작업을 수행할 필요가 없지만 pipelining을 위해 채워진 단계들을 wasted cycle라고 합니다.

Wasted cycles

wasted cycles

Clock Cycle은 가장 느린 단계에 맞춰야 합니다. 그리고 모든 단계를 수행할 필요가 없는 명령어들도 있습니다.

그래서 파이프라이닝을 해도 낭비되는 단계가 있을 수 있습니다.

Pipelining MIPS ISA

RICS 명령어의 특징인 단순한 명령어로 구성되어 있기 때문에, 하나의 명령어를 쪼개서 파이프라이닝하기 쉽습니다.

pipeline datapath

파이프라인 단계 사이의 State registers가 각 단계들을 분리합니다.

DM와 달리 IM의 경우, 모든 클럭 사이클 동안 IF(명령어 가져오기) 단계는 종종 PC(프로그램 카운터)를 기반으로 명령어 메모리에 순차적으로 액세스하기 때문에 Clock cycle과는 관련없이 계속 명령어를 가져오기만 하면 되기 때문에 System clock과는 연결되어 있지 않습니다.

레지스터 종류

Type of Register Description Examples
Logical Register Also called Architectural Register 32 registers in MIPS, ax, bx, sp, pc in x86
Programming interface, visible to programmer
Programmer’s model, Not many
Physical Register 은닉되어 있음, Many physical registers in CPU Used in pipelining, register renaming, etc.
Not a programmer’s model, CPU가 필요에 의해 사용

Pipeline DataPath 과정

State register - operation

pipeline의 뒷부분에 위치한 단계(later pipeline stage)에서 필요한 모든 정보가 해당 단계로 이동하기 위해서는 pipeline register를 거쳐서 전달되어야 함 (forwarding)

  • 레지스터 주소는 계속해서 파이프라인을 통해 전달되고 다시 피드백되어야 함 (녹색)

    • e.g. load 명령 (i.e. WB를 위한 레지스터 번호)
  • 오직 두 개의 데이터가 오른쪽에서 왼쪽으로 흐름 (보라색)

    • (1) data memory에서 register file로 로드된 데이터, 즉 load를 위한 레지스터 WB
    • (2) 다음 PC 값을 선택하는 것, 입력 중 하나는 MEM 단계에서 계산된 branch 주소에서 나옴
  • 파이프라인의 뒤에 위치한 명령(later ins)들은 이 두 역방향 데이터 이동에 영향을 받을 수 있음

    • 첫 번째 (load 명령어의 WB에서 ID 단계로)은 data hazard을 초래함
    • 두 번째 (branch 명령의 MEM에서 IF로)은 control hazard을 초래함 - 이러한 역방향 이동으로 인해 위험이 발생함

즉, 정리하면 다음과 같습니다.

  1. 데이터가 나중 단계에서 필요한 경우 해당 정보는 파이프라인 레지스터를 통해 전달되어야 함
  2. 레지스터 주소는 계속해서 파이프라인을 통해 전달되고 다시 피드백되어야 함
  3. 데이터의 두 가지 역방향 흐름은 DM에서 RF로 로드된 데이터와 다음 PC 값을 선택 과정이고, 이 과정들은 오른쪽에서 왼쪽으로 이동함
  4. 파이프라인의 뒤에 위치한 명령은 이러한 역방향 데이터 이동에 영향을 받아 data, control hazard가 발생할 수 있음

Pipeline Hazard 정리

모든 Control Signals은 ID 단계 동안에 결정될 수 있음

Control units of pipeline

control unit of pipeline

정리

  • 모든 명령어 단계는 1 clock cycle 동안 수행

    • 그러므로 어느 명령어는 1 clock cycle 이상동안 수행해야 함
  • 명령어마다 수행에 필요한 clock cycle이 다르다

레지스터의 값을 쓰는 경우, clock cycle의 시작 부분에서 수행

레지스터의 값을 읽는 경우, clock cycle의 끝 부분에서 수행

레지스터 파일은 IM이나 DM보다 빠르므로


Profile picture

이재원

이해하기 쉬운 코드를 작성하려 고민합니다.


© 2024 Won's blog Built with Gatsby