* 컴퓨터 성능 평가
- 컴퓨터의 성능을 평가하는 일은 단순하지 않다.
- 보는 시점에 따라 다양한 결과가 나올 수 있다.
- 응답시간(실행시간), 처리량, ... 등 다양한 시점이 존재한다.
* 성능향상 1 : 처리량 and 응답시간
- 실행시간이나 처리량이 변화하면 다른 쪽에도 영향을 미친다.
Case 1) Processor를 빠르게 업그레이드 한다. > 응답시간이 단축되고 이로인해 처리량도 증가한다.
Case 2) 시스템 Processor를 하나더 추가한다. > 처리량이 증가하게 되고, 이로인해 응답시간이 감소한다.
* 성능형상 2 : 상대적인 성능
Performance ∝ 1 / Execution Time
- 성능은 실행시간과 반비례한다. ( 실행시간이 작을 수록 성능은 좋다.)
- 같은 프로그램에서 A컴퓨터 실행시간이 10초, B컴퓨터 실행시간이 20초라면 A는 B보다 2배 성능이 좋다
- A컴퓨터가 B보다 성능이 3배좋다고 한다. B컴퓨터에서 실행시간이 18초인 프로그램이 A컴퓨터에서는 몇초에 돌아가는가?
> 18/3 = 6초
* CPU 성능을 결정하는 요인
- CPU_Time = CPU_clock_cycles * Clock_cycle_time
= 클럭의 사이클 수 * 클락덩 소유 시간
= CPU_clock_cycles / Clock_rate
= 클럭의 사이클 수 / 각 클럭이 진동하는 비율(주파수)
- CPU_Time(=CPU_Execution_Time) = User CPU time + System CPU time
= 프로그램 실행시간 + OS의 환경 조성시간
* CPU 향상 1 : 성능의 개선
- 컴퓨터 A : 4GHz 클럭, 프로그램 실행시간 = 10초, 프로그램 실행시간이 6초가 되도록 컴퓨터 B를 설계하라.
> 단, 클럭속도는 무한정 빨라질 수 있지만, 이로인해 컴퓨터B는 컴퓨터A보다 1.2배 많은 클럭을 필요하게 된다.
> COM A : 10 = CPU_CLOCK_CYCLE / 4GHz CPU_CLOCK_CYCLE = 40
> COM B : 6 = 40 * 1.2 / x x = 8, 따라서 컴퓨터 B의 클럭을 8GHz로 증가시킨다.
- 위 예를 통해서 CPU속도가 2배 빨라진다고 하더라도 속도가 2배빨리지는 것이 아님을 알 수 있다.
* CPI ( Clock cycles per instruction )
- 위 식에서는 명령의 수에 관한 사항이 포함되있지 않아 제대로된 성능 평가가 안됬다.
- CPI : 명령당 필요한 클럭수/평균 사이클 수를 의미한다.
* CPU 향상 2 : 성능식 사용
- 컴퓨터A : Clock_cycle_time = 250ps / CPI = 2.0
- 컴퓨터B : Clock_cycle_time = 500ps / CPI = 1.2
※ 주기가 증가하면 그 주기에 할 수 있는 Instruction 수가 증가흐는 것을 의미한다.
- 어느 것이 더 빠른 컴퓨터인가?
Step 1) A와 B에서 돌리는 프로그램의 Instruction 수를 I로 동일하다고 가정한다.
Step 2) Time = I * CPI * clock_cycle_time
Ta = I * 2.0 * 250 = 500I
Tb = I * 1.5 * 500 = 600I
Step 3) 결론
> Ta가 Tb보다 1.2배 빠르다고 할 수 있다.
- CPI와 clock_cycle_time은 서로 연관되있으므로 어느 것이 높거나 작다고 좋다고 할 수 없다.
* CPI 계속
- CPU 성능을 결정하는 기본요수
> CPU time for a program
> Instruction count
> CPI
> Clock cycle time
- Time = I * CPI * Clock_Cycle_time = Seconds/Program
- CPU_clock_cycle = SUM(CPI[i] * C[i])
> C[i]는 CPI[i]가 몇번 반복하는가를 카운팅
> CPI[i]와 C[i]는 서로 반비례 관계에 있다.
> 많이 사용되는 것일 수록 CPI를 줄어 최적화 시킨다. (RISK의 관점)
* CPU 성능비고 3 : 컴파일러의 개입
- 명령 형태가 A,B,C로 존재하며, 각 명령당 CPI는 각각 1,2,ㄱ이다.
- 고급언어로 작성된 프로그램을 컴파일러 1과 2를 이용하여 코드 시퀀스를 생성하였다.
Compiler 1 > A : 2 , B : 1 , C : 2
Compiler 2 > A : 4 , B : 1 , C : 1
현재의 판단, 총 사용되는 명령어의 수는 각각 5와 6으로 컴파일러 1에의한 것이 작다.(1이 더좋다)
- CPU Clock수를 계산해 보자.
Compiler 1 > 2*1 + 1*2 + 2*3 = 10
Compiler 2 > 4*1 + 1*2 + 1*3 = 9
현재의 판단, cycle이 적은 것이 실행시간도 적게 들기 때문에 컴파일러 2가 더좋다고 할 수 있다.
- 각 컴파일러에서의 CPI를 계산해보자 ( Clock수 / 명령수 )
Compiler 1 > 10 / 5 = 2
Compiler 2 > 9 / 6 = 1.5
현재의 판단, 명령당 소요되는 클락수가 컴파일러 2가 적기때문에 2가 더좋다.
- CPI는 명령 배합에 따라 다르므로, 클럭 속도가 같다하더라도 명령 개수와 CPI는 반드시 비교해야한다.
* CPU 성능 비교 4 : 여러프로그램 비교
- 두 개의 프로그램 1과 2가 있다.
- 컴퓨터 A는 프로그램 1을 2초, 프로그램 2를 4초에 실행한다.
- 컴퓨터 B는 프로그램 1을 5초, 프로그램 2를 2초에 실행한다.
- 이 경우에는 한가지의 단서가 더필요하게 된다.
> 어느 비율로 A와 B가 사용되는가?
> 각 비율에 따라 가중 산술을 적용하여 산출한다.
* 성능에 요인을 주는 것
1) 명령어의 수 ( 명령어의 수가 적으면 명령당 하는일이 증가하고, CPI도 증가하게 된다.)
2) Clock Cycle Time을 적게한다.
3) CPI를 낮춘다(핵심)
* MIPS (Million Instruction Per Second)
- 시간당 몇개의 명령어가 수행되는가?
- MIPS는 성능을 제대로 반영하지 못한다.
- 사용하는 컴파일러에 따라도 다르게 나올 수 있다.