Performance Issues
- 가장 지연시간이 긴 부분(longest delay)가 전체 클럭 주기(clock period)를 결정한다.
- 특히 치명적인 경로(경로가 길어서 delay가 클 확률이 높은): load instruction
- instruction memory → register → ALU → data memory → register
- 다른 instruction에 다른 주기로 실행할 수 없다.
- 모든 instruction은 한 clock cycle에 실행되어야 하며, 모두 같은 clock cycle time이어야 한다.
- 설계 원칙(design principle)을 위배한다.
- making the common case fast(가장 일반적인, 자주 사용되는 경로를 빠르게 하라)를 위배한다.
- 가장 느린 것에 맞춰지기 때문
- 자주 사용되는 경로를 빠르게 하려고 해봤자, 가장 느린 것에 맞춰진다.
- 우리는 pipelining을 통해 성능을 향상시킬 것이다.
Single Cycle CPU
Overview of Pipeline
- pipelining은 단일 작업의 지연 시간에는 도움이 되지 않지만, 전체 workload의 처리량을 높인다.
- 가장 느린 파이프라인 단계에 의해 파이프라인 속도는 제한된다.
- 서로 다른 리소스를 사용하여 동시에 작동하는 여러 작업
- 잠재적인 속도 상승 = pipe stages의 수
- 파이프 스테이지의 불균형한 길이로 속도 향상
MIPS Pipeline
- 5개의 stage. stage마다 다음 중 하나의 단계를 수행한다.
- IF: Instruction fetch from meory ( 메모리로부터 명령어를 불러온다 )
- ID: Instruction Decode ( 명령어 해석, 레지스터 read )
- EX: Excute operation or calculate address (작업 실행 혹은 주소 계산)
- MEM: Access memory operand (메모리에 접근)
- WB: Write result back to register (레지스터에 결과를 다시 기록)
Pipelined Execution
- 프로세서에는 여러 명령어가 동시에 다양한 단계에 존재한다.
- 각 명령어에 5주기가 소요된다고 가정하자.
Single Cycle, Multiple Cycle vs Pipeline
Pipeline Performance
- 각 stage별 시간을 측정해보면,
- 레지스터 read, write에는 각각 100 pico second가 소요된다.
- 다른 stage들은 200ps
- pipeline화된 데이터경로와 single-cycle의 데이터 경로를 비교해보면,
- single-cycle에서는 총 소요시간인 800ps 그대로.
- pipelined에서는 가장 소요시간이 긴 200ps
Pipeline Speedup
- 만약, 모든 stage들이 비슷한 처리시간을 갖는다면,
- 즉, 모두 같은 시간이라면 “stage의 수”배의 성능향상 효과.
- 모든 stage가 균등하지 않다면, 속도향상의 효과는 더 적을 것이다.
- 가장 느린 stage에 맞춰지므로.
- 총 시간이 800ps 이지만, 한 stage가 700ps 이라면, 다른 stage는 대기해야하고 결국 700ps
- 속도향상은 throughput을 늘려서 얻은 결과이다.
- 병렬식으로 동시에 여러 instruction을 실행시킴으로써
- 지연시간(latency, 각 instruction 하나 실행에 걸리는 시간) 자체는 줄어들지 않음.
Pipelining and ISA Design
- MIPS ISA는 pipelining에 적합한 구조임.
- 모든 instruction은 32-bit임.
- 한 cycle안에 fetch하고 decode하기 쉬움.
- c.f. x86: 1~17-byte(8~136-bit)의 다양한 길이
- 적은 종류의, 규격화된(regular) instruction format
- 한번에 decode하고 레지스터를 read 가능
- Load / Store addressing
- 주소 계산은 3번째 stage에서, 메모리 접근은 4번째 stage에서 이루어짐.
- 즉, stage별로 다른 작업을 수행할 수 있음.
- memory operand의 정렬(alignment. 주소가 4byte씩 되어있다)
- memory access는 한 싸이클 안에 이뤄진다.
MIPS Pipelined Datapath
→ 예전에 본 개략도는 single-cycle. 이제는 Multi(pipelined)
Pipeline registers
- 각 stage 사이에 레지스터들이 필요하다. (stage수 - 1)
- 이전 cycle에서 만들어진 정보를 가지고 있어야 하기 때문
Pipeline Operation
- pipeline datapath를 통한 instruction의 cycle-by-cycle(cycle에서 cycle로) 흐름
- “Single-clock-cycle” pipeline diagram
- single-cycle을 사용하는 pipeline을 보여줌.
- 사용되고 있는 하드웨어 자원을 강조
- c.f. “multi-clock-cycle” diagram
- 시간 경과에 따라 어떻게 실행되는지(operation) 보여주는 그래프
- 이제 load & store 명령어를 수행하는 “single-clock-cycle” diagram을 살펴보자.
Single-clock-cycle pipeline diagram
IF for Load, Store, …
ID for Load, Store, …
EX for Load, Store, …
MEM for Load, Store, …
MEM for Load
MEM for Store
WB for Load
- SW에서는 WB stage에서 강조되는 영역이 없다.
- 메모리에서 오른편을 흐르는 두 개의 흐름 (I-format의 LW용 값 / R-format의 결과값)이 없음
- 그래서 SW의 WB stage는 아무 작업도 없다.
- pipeline에서 WB는 5번째 stage이며, 이만큼 이미 다른 cycle이 진행되어, 레지스터에는 이미 다른 명령어를 해석하고 있을 것이다.
- 기존 명령어의 $rt가 아니므로, WB를 위해 기존 명령어의 $rt를 보존해야 한다.
- 즉 레지스터에 값을 넣어야하는데, pipeline으로 인해 그 값이 이미 변경되어있을 것이다.
Corrected Datapath for Load
- $rt 보존을 위해, 레지스터 이후의 stage간 레지스터 (pipeline register)마다 $rt를 넘겨줌으로써, WB에서 다시 레지스터에 전달하여 활용.
Multi-Cycle Pipeline Diagram
- 시간과 명령어에 따른 resource(하드웨어 자원)의 사용을 보여줌.
- 전통적인, 보통의 형태 (Traditional form)
Single-Cycle Pipeline Diagram
- 주어진 cycle(특정한 cycle)에서 pipeline의 상태
- 특정한 cycle에서 각 stage들이 어떤 명령어를 수행하고 있는지. 내부 상태가 어떤지
- 바로 위의 diagram 사진을 보면, CC5의 상태
Performance를 위한 Pipeline
→ pipeline이 다 차게되면, 그 이후의 모든 cycle에서 하나의 instruction이 완료되기에 CPI는 1이다.
MIPS Pipeline Datapath Additions/Mods
- pipeline stage 간에 상태 register를 위치시켜 고립시킨다.
Pipelined Control
- Control signal(제어신호)는 instruction으로부터 파생된다.
- 각 stage에 control들이 전달되기 위해, pipeline register(각 stage간 레지스터)에 함께 전달되어 보존되어야 한다.
- single-cycle과는 달리, ID에서 해석되어 생성된 제어신호들이 각 stage에 쓰이기 위해 보존되어야 하므로.
- pipeline에서는 ID에서 또 새로운 명령어로 다른 제어신호들을 생성할테니..
- pipeline이 single-cycle보다 더 복잡해지는 것