Post

컴퓨터 구조 - CPU 구조 - CPU 성능 측정

CPU 성능 측정

일반적으로 어떤 성능을 이야기할 때 아래의 지표로 이야기한다.

  • 알고리즘 : 몇 개의 Operation을 실행하는지
  • 프로그램 언어, 컴파일러, 아키텍처 : Operation 당 몇 개의 기계 명령어를 실행하는지
  • 프로세서와 메모리 시스템 : Instruction을 실행하는데 얼마나 빠른지
  • IO/System : I/O Operation이 얼마나 빠른지

여기서 프로세서에 대한 이야기를 해볼까 한다.
기본적으로 프로세서의 성능에 대해서 이야기할 때는 CPU Time을 두고 이야기한다.

이 CPU Time이라는 것은 한마디로 어떤 프로그램을 실행하는데 있어서 걸리는 시간을 말한다.
이를 수식으로 쪼개본다면 아래와 같다.

\[CPU\;Time = Instruction\;Count \times CPI \times Clock\;Cycle\;Time\]

여기서 Instruction Count(이하 IC)는 총 명령어의 개수를 뜻하는 것인데 여기 Instruction 에도 종류가 있다.

  • Static Instruction : 프로그램을 어셈블리어로 바꾸었을때 명령어의 개수
  • Dynamic Instruction : 실제 실행되는 명령어의 개수

예를 들어 아래와 같은 x86 어셈블리어 코드가 있다고 하자

    mov ax 10
start:
    dec ax
    jnz start

위의 코드를 본다면 코드는 몇줄 안되지만 실제로 실행되는 코드는 반복문으로 인해 훨씬 많다.
당연하지만 위 CPU Time을 계산하는 공식에서 IC에서 사용하는 것은 Dy1namic Instruction 을 말한다.

CPI(Cycles Per Instruction)는 명령어당 사용하는 사이클 수를 말한다.

Clock Cycle Time(이하 CCT)은 실제 한 사이클이 도는데 필요한 시간을 말한다. 가령 2GHz의 Clock을 갖는 CPU가 있다고 가정할때 해당 CPU의 CCT는 아래와 같다.

\[2GHz\;Clock\;Cycle\;Time = \frac{1}{2 \times 10^{9}}sec = 0.5 ns\]

CPU TIME을 구하는 식중 IC와 CPI 곱으로 CPU Clock Cycles로 표현할 수 있다.

\[CPU Clock Cycles = CPI \times IC\]

그렇다면 CPU TIME 역시 다음과 같이 표시 될 수 있다.

\[CPU\;Time = CPU\;Clock\;Cycles\times Clock\;Cycle\;Time = \frac{CPU\;Clock\;Cycles}{Clock\;Rate}\]

CPU TIME이 작을 수록 CPU의 성능이 좋다고 할때 이 성능을 늘리기 위해선

  • CPU Clock Cycles를 줄인다
  • 클럭 속도를 빠르게 한다(즉, Hz를 높인다)

물론 두 지표간에 어느정도 균형을 맞출 필요는 있다.

※ 본 포스팅은 업데이트될 예정이며 추가적인 검증 역시 필요하다.

This post is licensed under CC BY 4.0 by the author.