IF : Instruction fetch from memory
(reading instruction memory from PC)
ID : Instruction decode and register read
(what instruction means)
EX : Execute operation or calculate address
(by ALU)
MEM : Access memory operand
WB : Write result back to register
각 stage에서의 time을 다음과 같이 가정하자
lw total time
= 200 + 100 + 200 + 200 + 100
= 800ps
sw total time
= 200 + 100 + 200 + 200
= 700ps
R-format total time
= 200 + 100 + 200 + 100
= 600ps
beq total time
= 200 + 100 + 200
= 500ps
단계들이 완벽하게 균형을 이루고 있을 때 (all stages are balanced)
명령어 사이의 시간(pipelined)
= 명령어 사이의 시간(nonpipelined) / 파이프 단계 수
이상적인 조건 하에 pipelining에 의한 속도 향상은 파이프 단계 수와 거의 같다
균형을 이루고 있지 않으면, speedup is less
MIPS ISA는 pipelining을 위해 설계되었다
(MIPS is good for a pipeline technique)
All instructions are 32-bits
(모든 명령어는 같은 길이를 갖는다)
이는 첫 번째 pipeline에서 명령어를 가져오고
그 명령어들을 두 번째 단계에서 해독하는 것을 훨씬 쉽게 해준다
(Easier to fetch and decode in one cycle)
c.f. x86같은 경우 명령어 길이가 1바이트부터 15바이트까지 변하기 때문에 파이프라이닝이 매우 힘들다
Few and regular instruction formats
(몇 가지 안 되는 명령어 형식을 가지고 있다)
Load / Store addressing
(메모리 피연산자가 load와 store 명령어에서만 나타난다)
Alignment of memory operands
(피연산자는 메모리에 정령되어 있어야 한다)
Cannot start next instruction in next cycle
-> 3가지 이유가 있다.