Computer Architecture 4 - pipelining

pipelining은 cpu의 속도를 증가시키기 위한 가장 중요한 요소 중 하나이다. 우리가 어떤 일을 할 때 반드시 일련의 과정을 순차적으로 해야 할 필요는 없다. 

예를 들어 빨래를 하는 일련의 과정을 생각해보면, 우리는 하나의 빨래를 바구니에 담아 세탁기에 넣고, 세탁이 끝날 때 까지 기다렸다가 바구니에 담아 건조대에 널은 후, 그 다음 빨래를 동일하게 진행할 수 있다. 그러나 이 경우 세탁기가 돌아가는 시간, 빨래를 바구니에 담는 시간, 건조대에 너는 시간에 바구니/세탁기/건조대는 반드시 하나씩 사용되고 나머지는 사용되지 않아 시간이 낭비된다. 

따라서 우리는 빨래를 세탁기에 돌리고, 그 다음 빨래를 바구니에 담아 준비하고, 그 이전 빨래는 건조대에 너는 작업을 동시에 진행할 수도 있다. 왜냐하면 각 과정은 서로 사용하는 리소스(바구니/세탁기/건조대)가 다르므로 동시에 진행함으로써 어느 것 하나가 사용되지 않고 시간이 낭비되는 상황을 막을 수 있다. 말하자면 전체 작업을 부분 별로 나누어 진행하는 것이다. 이렇게 할 경우 전체 과정은 매우 빨라진다. 이것이 pipelining의 기본 개념이다. 


이 때 n개의 작업을 k개의 stage로 분할하여 시행할 때, 전체 걸리는 시간은 n+k-1이 된다. 예를 들어 3번 반복해야 하는 작업을 총 4개의 stage로 나누어 시행할 때, 맨처음은 1번 작업의 첫 번째 스테이지를, 그 다음은 1번 작업의 두 번째 스테이지와 2번 작업의 첫 번째 스테이지를 같이 시행할 수 있다. 이를 반복하게 되면, 전체 시행해야 하는 stage 수 (시행 시간)을 계산할 수 있다.

댓글

이 블로그의 인기 게시물

IIKH Class from Timothy Budd's introduction to OOP

Compiler 9 - Efficient Code generation

Software Engineering 10 - V&V, SOLID principle