본문 바로가기
컴퓨터

[컴퓨터 구조] CPU time

by skyjwoo 2020. 6. 9.
728x90
반응형

컴퓨터 구조 시간에는 CPU에 대해서 주로 다룬다. 

그만큼 CPU가 컴퓨터 내에서 핵심적인 구조 이리라.

 

CPU time 이야기가 나온 이유는 컴퓨터의 성능을 측정하기 위해서이다. 

컴퓨터는 기본적으로 기계, 그리고 어원에서도 살펴볼 수 있듯이, 계산을 위해 만들어진 기계이다.(compute + er)

우리는 어떤 기계를 원하는 가? 싸고 성능 좋은 기계를 원한다. 여기서 컴퓨터 시장에 대해 논하고자 하는 이야기가 아니니, 가격은 차치하고, 성능에 대해 살펴보자.

 

그럼 이 성능은 어떻게 설명될 수 있는가?

걸린 시간(Response time, Execution time)과 산출량(? Throughput)이다. 

시간이 얼마나 걸렸는지, 단위 시간 동안에는 얼마나 많은 task를 해 냈는 지를 기준으로 성능이 좋은 컴퓨터를 고를 수 있겠다. 

 

우선 여기선 시간 측면에서의 성능에 대해 고려해보고자 한다. 

시스템 전체의 전반적인 시간 측정에는 Elapsed time이라는 개념이 쓰인다. CPU 작업 시간, I/O에 걸리는 시간, OS overhead, idle time 등 모든 내용이 고려된다. 

 

이 중에서도 CPU에서 주어진 job을 처리하는 데 걸리는 시간이 바로 CPU time이다. 즉, CPU time은 컴퓨터의 성능을 고려할 수 있는 하나의 기준이다. 

 

그럼 이 CPU time은 어떻게 구할까? 

 

그 전에 한 번 비유를 해보고자 한다. A라는 푸드 파이터가 있다. 핫도그 100개 먹기 세계 신기록에 도전한다고 할 때, 이 푸드 파이터를 CPU라 생각하고 핫도그를 먹는 행위를 job이라 생각해볼 수 있다.

 

푸드 파이터를 CPU라 생각하고 핫도그를 먹는 행위를 job이라 생각해볼 수 있다.

CPU time을 구하는 공식은 다음과 같다. 

CPU time = Clock cycles x Clock cycle time

Clock(클럭)에 대해 알기 위해서는 우선 회로에 대한 기본적인 이해가 있어야 한다. 

쉽게 비유해 보자면, 사람이 살아가기 위해 심장에서의 펌핑이 필요하듯이 CPU 동작에 필요한 전압이 펌핑되는 것이라 보면 된다. High-Low 상태가 반복되며 주기적으로 반복되는 이 신호를 이용해 CPU는 연산을 수행할 수 있다. 

 

쨌든 이를 푸드 파이터 비유에 다시 적용해 보면, 음식을 먹는데 씹는 행위가 필요하다고 하자. 그리고 일정 횟수의 씹는 행위(clock cycles) 후에 핫도그 하나(a job)를 먹었다고 말할 수 있다. 그리고 한 번의 씹음에 걸리는 시간을 Clock cycle time이라 할 수 있다.

 

여기서 잠시 멈춰서 생각해 보면, CPU time이 적을 수록, 짧을 수록 더 성능이 좋다. 푸드 파이터도 더 짧은 기록이 나올 수록 좋은 것이다. 그럼 시간을 줄이려면 어떻게 해야 할까?

공식에 비춰서 생각해 보면, clock cycle(씹는 횟수)를 줄이고, clock cycle time(한 번 씹을 때 걸리는 시간)을 줄여야 한다. 그러나 이게 실제로 가능할까? 결론은 "쉽지 않다"이다.

 

이유는 두 가지가 trade off 관계에 있기 때문이다. 

power가 제한적이기에 어느 정도 이상의 성능 개선은 어렵다. clock cycle을 줄이면 cycle time이 늘어나고 cycle time을 줄이면 cycle 수가 늘어난다.

푸드 파이터도 인간인지라 매우 빨리 씹으면서 동시에 씹는 횟수까지 줄이기엔 어려움이 있을 것이다. 하나의 핫도그를 먹기 위해 두 가지를 동시에 할 수는 없다. 빨리 씹으려 하면 음식이 충분히 잘게 쪼개지지 않을 것이고 결국 더 많이 씹어야 핫도그를 삼킬 수 있게될 것이다. 

 

 

Clock cycle은 instruction 측면에서 좀 더 세분화 해 살펴볼 수 있다. CPU 역시 결국 명령어를 받아서 작업을 수행한다. 

명령어의 수와 명령어 당 cycle 수로 cycle을 표현해 볼 수 있다. 그러니 결국 명령어의 수명령어당 cycle 수를 줄이는 게 관건이다.

 

clock cycles = instruction count x Cycles per instruction(CPI) 

 

이를 바탕으로 cpu time 공식을 재 정의해 보면 다음과 같다. 

 

cpu time = instruction count x CPI x Clock Cycle Time

cpu time = ${instruction \; count * CPI} \over {clock \; rate}$

 

프로그램 당 CPU time을 계산한다 하면 다음과 같다. 

 

CPU time/program = seconds/program = ${instructions} \over {program}$ * ${clock \;cycle} \over {instruction}$* ${seconds} \over {clock \; cycle}$

 

여기서 ${clock \;cycle} \over {instruction}$ = CPI, ${seconds} \over {clock \; cycle}$ = 한 cycle에 걸린 시간 = $1 \over clock \; rate$이다.

 

 

 

 

 

728x90
반응형

댓글