Pipelining
빨래를 하는 과정이 4단계로 나누어져 있다고 가정합시다.
이를 순차적으로 수행하면, 한 빨래가 마무리되면 다음 빨래를 수행합니다.
그런데 이를 순차적으로 수행하지 않고, 각 단계별로 나누어 병렬적으로 실행할 수 있습니다.
5 Stages of Load Instruction
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
각 단계롤 나누어 명령을 수행하고 있습니다. 그런데 Clock-Cycle은 가장 느린 IF 단계인 200ps 만큼에 맞춰져 있습니다.
MIPS 프로세서의 경우, 각 명령어가 끝나기 전에 다음 명령어를 실행합니다.
- throughput을 증가
- latency는 줄어들지 않음 → 오히려 pipeline overhead로 인해 소폭 증가할 수도 있습니다.
sw
명령어는 레지스터의 값을 메모리에 저장하므로 WB 단계가 필요없습니다.
그리고 R-포맷의 경우, Mem 단계에서 메모리의 값을 읽거나 쓰기 작업을 할 필요가 없습니다.
이렇게 아무 작업을 수행할 필요가 없지만 pipelining을 위해 채워진 단계들을 wasted cycle라고 합니다.
Wasted cycles
Clock Cycle은 가장 느린 단계에 맞춰야 합니다. 그리고 모든 단계를 수행할 필요가 없는 명령어들도 있습니다.
그래서 파이프라이닝을 해도 낭비되는 단계가 있을 수 있습니다.
Pipelining MIPS ISA
RICS 명령어의 특징인 단순한 명령어로 구성되어 있기 때문에, 하나의 명령어를 쪼개서 파이프라이닝하기 쉽습니다.
파이프라인 단계 사이의 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 과정
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을 초래함 - 이러한 역방향 이동으로 인해 위험이 발생함
즉, 정리하면 다음과 같습니다.
- 데이터가 나중 단계에서 필요한 경우 해당 정보는 파이프라인 레지스터를 통해 전달되어야 함
- 레지스터 주소는 계속해서 파이프라인을 통해 전달되고 다시 피드백되어야 함
- 데이터의 두 가지 역방향 흐름은 DM에서 RF로 로드된 데이터와 다음 PC 값을 선택 과정이고, 이 과정들은 오른쪽에서 왼쪽으로 이동함
- 파이프라인의 뒤에 위치한 명령은 이러한 역방향 데이터 이동에 영향을 받아 data, control hazard가 발생할 수 있음
모든 Control Signals은 ID 단계 동안에 결정될 수 있음
Control units of pipeline
정리
-
모든 명령어 단계는 1 clock cycle 동안 수행
- 그러므로 어느 명령어는 1 clock cycle 이상동안 수행해야 함
-
명령어마다 수행에 필요한 clock cycle이 다르다
레지스터의 값을 쓰는 경우, clock cycle의 시작 부분에서 수행
레지스터의 값을 읽는 경우, clock cycle의 끝 부분에서 수행
레지스터 파일은 IM이나 DM보다 빠르므로