[컴퓨터 구조] Pipeline
RISC - V pipeline에 대해서 알아보자.
💻 Pipeline
Instruction이 실행하는 단계는 총 다섯단계로 나뉜다.
- IF(Instruction Fetch) : 메모리로부터 inustruciton을 뽑아온다.
- ID(Instruction Decode) : 레지스터를 읽고 instruction을 해석하다.
- EX(Execute) : 연산수행이나 , 주소를 계산한다. -> ALU를 쓰는 부분이다.
- MEM : 데이터 메모리안에 있는 연산자에 접근한다.
- WB(Write back) : 결과값을 레지스터에 작성한다.
원래는 이 5단계가 sincle clock cycle에 실행되었다. 그러나 이렇게 된다면, 한 클럭에는 한 명령어밖에 수행하지 못하는 상황이 생긴다. 이것은 매우 비효율적이므로, 파이프라인을 도입하게 되었다.

Pipeline을 이용하여 실행한 것을 보여주고 있다.
각 과정은 CPU 하드웨어의 각각 한부분씩 사용하고 있다. 위에서 ld명령어에서 ID를한다면, IF를 하는부분의 하드웨어가 놀고있게 된다. 이렇다면 시간적 손해일 것이다. 그렇기에 다음줄에 오는 명령어인 or의 IF를 해주게 된다.
단계별로 각각 다른 H/W부분을 사용하고 있기 때문에 이런 결과가 나올 수 있다. 또한, 각 instruction은 한클럭에 하나의 단계만 수행할 수 있다.
💻 Pipeline Performance
Single-cyle에 수행하는 nonpipelined execution 과 pipelined exectuion을 비교해보겠다.

각 단계를 나누어 시간을 계산한 도표이다.
register read/write하는데는 100ps가 들고 다른 단계는 모두 200ps의 시간이 든다.


singcle Cycle이었다면,lw 명령어를 수행하는데는 800ps의 시간이든다. 이때 한 clock cycle은 800ps가 되며, 3번의 ld를 수행하는데는 총 2400ps가 든다.
그에 비해, pipeline을 사용한 부분을 보자. 한클락을 200ps로 잡은 부분이다. pipeline을 사용한다면 clock cycle은 가장 느린 작업에 맞춰야 한다. 이게 무슨 말이냐면 200ps~400ps을 보면 위 ld는 register read 작업을 하고 있고, 밑 ld는 instruction fetch을 하고있는데, ID작업은 100ps, IF작업은 200ps가 걸린다. 가장 느린작업에 clock cycle을 맞추므로, 이작업에서 clock cycle은 더 느린 IF작업에 맞추어 200ps로 잡는다. 이렇기 떄문에 모든 작업의 clock cycle은 200ps가 된다.
이렇게 되면 한명령어를 수행하는데는 1000ps가 걸린다. 하지만 pipeline을 이용하면 복수의 명령어들이 한 cycle에서 같이 수행되고 있기 떄문에, 3개의 명령어를 수행하는데는 1400ps밖에 걸리지 않는다.
pipeline기법은 각 명령어의 수행시간을 줄이지 않고, 명령어 throughput을 향상시킨다.