단순히, 특정 프로그램이 실행되는 시간을 측정하기엔 고려해야 할 변수가 많다.
특정 프로그램이 실행이 되는 동안, 다른 프로그램이 같이 실행중이라면 프로그램 하나가 실행이 될 때 보다 더 오래 걸릴테니.
때문에 Performance 측정에는 Time, Rate, Ratio 등 다양한 지표로 performance를 측정한다.
Time
Response time : 특정 프로그램이 실행되고 나서, 실행이 끝날때 까지 걸리는 총 시간
즉, 실제로 사용자가 체감하는 시간
CPU Time : CPU가 특정 프로세스에 할당되어있는 시간
즉, 시스템 디자이너들이 성능개선을 위해 집중하는 시간
Time 파트에선 CPU Time을 위주로 설명하겠다.
Clock
CPU time을 계산하기에 앞서 clock이라는 개념을 짚고 넘어가자.
디지털 장치들에는 부품을 움직이게 하는 전기적 신호가 존재한다.
디지털 장치에선 전기가 흐르고 있는 상태(ON)과 전기가 흐르지 않는 상태(OFF)가 존재하며, 이 두가지 상태는 주기적으로 계속 바뀐다.
즉, 컴퓨터 내부에선 특정 시간마다 ON과 OFF가 반복적으로 바뀌며, 이러한 전류 흐름을 Clock Frequency, 또는 Clock 이라 부른다.
컴퓨터 내부의 모든 operation은 clock에 의존적이다.
즉, 컴퓨터의 명령어들은 clock이 발생하거나 끝나는 시점에서 시작되거나 종료된다.
아래는 clock의 흐름을 나타낸 그림이다.
clock cycle time
clock에서의 한 주기의 길이를 clock cycle time이라 한다. (한번 똑 딱 하는 시간)
clock period
clock cycle의 기간 (시간)
clock frequency (rate)
초당 사이클
Clock cycle time=clock frequency1
Executing 1 instruction
CPU time을 계산하기 전, 한 명령어가 실행되는 시간을 계산해 보자.
컴퓨터의 명령어들은 clock의 주기에 맞춰 처리된다.
때문에, 각 명령어의 실행 시간은 해당 명령어가 완료되기까지 몇 clock cycle이 필요한 지와 비례한다. 즉, 특정 명령어 하나가 실행되는 CPU time은 몇초짜리 clock cycle이 총 몇번 필요한지 를 알면 쉽게 구할 수 있다.
CPU time per 1 instruction=# of clock cycls for instruction×Clock cycle time
Executing 1 process
명령어 하나에 소요되는 CPU time은 위와 같이 구할 수 있다.
그렇다면, 우리는 한 프로세스에 명령어가 얼마나 들어가는지 알고 있다면 프로세스 하나의 CPU time을 구할 수 있다.
CPU time=# of instruction in Process×CPU time per instruction =# of instruction in Process×Cycle per instruction×Time per Cycle = IC x CPI x Clock cycle time = (IC x CPI ) / Clock rate
Rate
Rate로 performance를 평가할 때는 단위시간동안 수행되는 명령어의 수가 기준이 된다. 즉, throughput에 관련된 성능이다.
MIPS (Million instructions per Sec)
MIPS는 말 그대로 1초동안 1M개단위의 명령어를 얼마나 처리할 수 있는지에 대한 값이다. MIPS=Execution time×106Instruction count(IC)=CPI×106Clock frequency
Ratio
ratio는 time과 rate를 모두 고려한 performance로, 상대적인 성능 비교에 사용된다.
예 : A가 B보다 n% 빠르다.
평균
위의 세가지 지표는 전부 성능에 관련된 지표들이며, 때문에 평균 성능을 구해야 할 때가 있다.
이 때, 각각의 지표마다 사용하는 평균이 다름을 주의하자!
Time : 산술 평균을 사용한다. Arithmetic mean=nx1+x2+⋯+xn=n1∑i=1nxi Rate : 조화 평균을 사용한다. Harmonic mean=x1+x2+⋯+xnn=∑i=1nxi1n Ratio : 기하 평균을 사용한다. Geometric mean=nx1×x2×⋯×xn=(Πi=1nxi)n1=en1∑i==1nln(xi)
Amdahl's Law
싱글코어의 컴퓨터를 듀얼코어, 쿼드코어로 성능을 향상시킨다면, 싱글코어에 비해 2배, 4배의 개선된 성능을 얻을 수 있는가?
-> 결론부터 이야기 하자면, 그렇지 않다.
프로그램은 어떠한 성능 개선을 하였을 때, 해당 성능 개선의 효과를 받을 수 있는 부분과 성능개선의 효과를 받을 수 없는 부분으로 나뉘기 때문이다.
성능개선의 효과를 받을 수 있는 부분이 전체 중 P%라고 하고, 성능 개선으로 인해 해당 부분이 s배 빨라졌다고 가정하자. 그럼 이 때 전체 수행 속도의 향상 정도는 다음과 같다 Slatency(s)=(1−P)+sP1