컴퓨터 구조 - CPU 구조 - CPU 성능 측정
CPU 성능 측정
일반적으로 어떤 성능을 이야기할 때 아래의 지표로 이야기한다.
- 알고리즘 : 몇 개의 Operation을 실행하는지
- 프로그램 언어, 컴파일러, 아키텍처 : Operation 당 몇 개의 기계 명령어를 실행하는지
- 프로세서와 메모리 시스템 : Instruction을 실행하는데 얼마나 빠른지
- IO/System : I/O Operation이 얼마나 빠른지
여기서 프로세서에 대한 이야기를 해볼까 한다.
기본적으로 프로세서의 성능에 대해서 이야기할 때는 CPU Time을 두고 이야기한다.
이 CPU 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를 높인다)
물론 두 지표간에 어느정도 균형을 맞출 필요는 있다.
※ 본 포스팅은 업데이트될 예정이며 추가적인 검증 역시 필요하다.