[CA] Performance

짱수·2022년 12월 23일
0

CS

목록 보기
2/4
post-custom-banner

이번 장은 컴퓨터의 성능을 측정하는 방법에 관한 내용이다.

단순히, 특정 프로그램이 실행되는 시간을 측정하기엔 고려해야 할 변수가 많다.
특정 프로그램이 실행이 되는 동안, 다른 프로그램이 같이 실행중이라면 프로그램 하나가 실행이 될 때 보다 더 오래 걸릴테니.
때문에 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=1clock frequency\text{Clock cycle time} = {1 \over \text{clock frequency}}

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\text{CPU time per 1 instruction} = \# \text{ of clock cycls for instruction} \times \text{Clock cycle time}

Executing 1 process

명령어 하나에 소요되는 CPU time은 위와 같이 구할 수 있다.
그렇다면, 우리는 한 프로세스에 명령어가 얼마나 들어가는지 알고 있다면 프로세스 하나의 CPU time을 구할 수 있다.

CPU time=# of instruction in Process×CPU time per instruction\text{CPU time} = \# \text{ of instruction in Process} \times \text{CPU time per instruction}
=# of instruction in Process×Cycle per instruction×Time per Cycle=\# \text{ of instruction in Process} \times \text{Cycle per instruction} \times \text{Time per Cycle}
= IC x CPI x Clock cycle time = (IC x CPI ) / Clock rate=\text{ 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=Instruction count(IC)Execution time×106=Clock frequencyCPI×106\text{MIPS} = {\text{Instruction count}(IC) \over \text{Execution time} \times 10^6} = {\text{Clock frequency}\over CPI \times 10^6}

Ratio

ratio는 time과 rate를 모두 고려한 performance로, 상대적인 성능 비교에 사용된다.
예 : A가 B보다 n% 빠르다.

평균

위의 세가지 지표는 전부 성능에 관련된 지표들이며, 때문에 평균 성능을 구해야 할 때가 있다.
이 때, 각각의 지표마다 사용하는 평균이 다름을 주의하자!

Time : 산술 평균을 사용한다.
Arithmetic mean=x1+x2++xnn=1ni=1nxi\text{Arithmetic mean} = {{x_1 + x_2 + \cdots + x_n}\over n}= {1\over n}\sum^n_{i = 1}x_i
Rate : 조화 평균을 사용한다.
Harmonic mean=nx1+x2++xn=ni=1n1xi\text{Harmonic mean} = {n\over{x_1 + x_2 + \cdots + x_n}}= {n\over \sum^n_{i = 1}{1\over x_i}}
Ratio : 기하 평균을 사용한다.
Geometric mean=nx1×x2××xn=(Πi=1nxi)1n=e1ni==1nln(xi)\text{Geometric mean} = {{}^n\sqrt{x_1 \times x_2 \times \cdots \times x_n}}= \left({\Pi^n_{i = 1}x_i}\right)^{1\over n}={e^{{1\over n}\sum^n_{i= = 1}ln(x_i)}}

Amdahl's Law

싱글코어의 컴퓨터를 듀얼코어, 쿼드코어로 성능을 향상시킨다면, 싱글코어에 비해 2배, 4배의 개선된 성능을 얻을 수 있는가?
-> 결론부터 이야기 하자면, 그렇지 않다.
프로그램은 어떠한 성능 개선을 하였을 때, 해당 성능 개선의 효과를 받을 수 있는 부분과 성능개선의 효과를 받을 수 없는 부분으로 나뉘기 때문이다.

성능개선의 효과를 받을 수 있는 부분이 전체 중 P%P\%라고 하고, 성능 개선으로 인해 해당 부분이 ss배 빨라졌다고 가정하자. 그럼 이 때 전체 수행 속도의 향상 정도는 다음과 같다
Slatency(s)=1(1P)+PsS_{\text{latency}}(s) = {1\over{(1-P) + {P\over s}}}

profile
Zangsu
post-custom-banner

0개의 댓글