[ 컴퓨터 구조 ] 19. Performance
Performance관련해서는 고려할 점이 2가지이다.
성능 / 비용
우리가 비용에 관련해서 공부할 것은 아니므로 성능을 어떻게 따질지를 알아보자.
먼저 성능을 따지는 기준에 대한 예시를 하나 보자.
- Boeing 747 비행기는 목적지까지 가는데 속도가 느려 6.5시간이 걸린다.
하지만 470명을 운송할 수 있기에 Throughput은 470명이 610으로 이동한 정도이다.
- Concorde 비행기는 목적지까지 3시간이면 갈 수 있는 속도이다.
하지만 132 명을 태울 수 있기에 Thoughput 도 그만큼 낮다.
먼저, 돈을 생각하지 않는 승객의 입장을 생각해보자.
이 승객은 빨리 목적지에 도착하는 것이 좋기 때문에
비행(작업)에 시간이 조금 걸리는 Concorde를 탑승할 것이다.
그렇다면 비행기 노선을 짜고 태우는 사람의 입장을 생각해보자.
한 번에 여러 승객을 태우는 게 본인들에게도 이득이고, 여러 번 왔다갔다 하지 않아도 되기에
한 번 비행(작업)할 때, 많은 양을 할 수 있는 Boeing 747이 이득일 것이다.
이와같이 Performance를 분석할 때 고려할 점은
1) 빨리 수행할 수 있는지 (Execution Time, Latency)
2) 정해진 시간만큼 얼마나 많은 양을 할 수 있을지 (Throughput)
가 있다.
따라서 성능을 높이고 싶다면 두 가지를 고려하여
latency를 줄이거나
Throughput을 늘리는 방법이 있다.
+ 틈새퀴즈)
만약 같이 돌아갈 machine이 하나 늘어난다면 어느 것이 늘어날까?
Throughput : 일 손이 하나 늘어난거지 하나의 일을 하는 것에 시간이 줄어드는 것은 아니다.
Execution time = Latency time
- Elased Time: 작동하는 것 관련하여 모든 것을 다 카운트한 시간
- CPU Time : I/O와 다른 프로그램이 실행되는 시간은 카운트 X
이 중에서도 System time, user time이 있는데, 우리는 user time만 고려할 것이다.
성능은 수행 시간에 반비례
[ Y가 X보다 1.9배 더 좋은 성능을 가지고 있다 ]
Clock period : Clock 한 번에 걸리는 시간
Clock frequency (rate) : 1초에 Clock이 몇번 도는지
CPU Time
CPU Time = CLK 개수 * CLK 사이클당 걸리는 시간
= CLK 개수 / Clock rate ( 시간 = 1/초당 몇 번 뛰는지)
이러한 점을 고려했을 때, Performance를 올릴 수 있는 방법
1) CLK Cycle 줄이기
2) CLK Rate 늘리기
하지만
- CLK 사이클을 줄이면 할 수 있는 일이 적어질 수도 있다.
- Rate 는 초당 실행할 수 있는 CLK 사이클의 수
Rate를 늘리면 CLK 사이클이 늘어날 수도 있다.
문제 )
한 프로그램을 돌리는데 시간이 얼마나 걸리는지는
Instructions 의 갯수와 비례한다.
Inst의 갯수가 많으면 실행 시간이 오래 걸린다. (당연함)
Q. 컴퓨터 설계는 실행되어야 하는 명령어의 개수에 어떻게 영향을 줄까?
: 명령어를 Architect 한 방식에 맞게 만든다.
한 CLK당 시간이 오래 걸린다면, 성능은 떨어질 수 있다.
Q. How can architects (not technologists) reduce clock period?
A . Cirtical path를 줄인다. ( CLK Period는 가장 긴 놈한테 맞추기 때문에)
Q. What ultimately limits an architect’s ability to reduce clock period ?
A. Clock to Q time = Propagation delay 가 있기 때문에 제약이 많다.
프로그램을 돌리는 데에 걸리는 시간은 = Inst의 갯수와 CLK Period time 과 비례한다.
좌변과 우변이 같기 위해서는 어떻게 해야할까?
같게 해주려고 Cycles / Inst를 해보니 = CPI이다.
하나의 Inst를 하는데 몇 개의 Cycle이 필요한지 보는 것.
+ 우리는 성능을 따질 때는 우변에 있는 3개 모두 고려해야 정확한 CPU Time을 측정할 수 있다.
CPI
Clock cycle = Inst 개수 * CPI ( Inst 하는데 필요한 Clock Cycles)
결과적으로 Clock cycle * Clock time이긴 함
CPU Time = Inst 개수 * CPI * Clock Cycle 하나 걸리는 시간
- Inst Count : 프로그램 , ISA(Instruction Set Architecture) , Compiler 에 따라 정해짐
- Average cycle per instruction = 평균 CPI ( 명령어당 필요한 CLK Cycle의 평균)
:
1) Instruction mix ( "어떤 Inst로 이루어져있는지" 정도로 생각하면 됨)
--> 다른 명령어는 다른 CPI를 가지고 있다. = 따라서 avg CPI를 구하는 게 나을 것
2) Cache
예제 )
어느 것이 빠른지 물어봤으니 각각 CPU Time을 구한다.
--> 각각 Same ISA 이고, 같은 작업을 하는 것을 비교하는 것일테니
CPU Time = (같은 일) * CPI * Clock Cycle Time로 비교한다.
A = 일 * 2.0 * 250 = 500*일
B = 일 * 1.2 * 500 = 600*일
같은 일은 하는데 A는 500a만큼의 시간이 걸리고, B는 600a만큼의 시간이 걸린다.
a가 1.2배 더 빠름
각 명령어들이 다른 Clock Cycle을 가진다면
평균을 구한다~!!
예)
A B C 각각 CPI가 다르다.
1의 방식으로 작업할 때 Inst Count 로 계산해보자.
Inst count (in seq 1 ) 에서 평균 구하는 건
CPI * IC (=총 CLK cycle) 를 각각 해주고 Inst 개수로 나눈다.
- IC : 2+1+2 = 5
- 총 필요한 Clock Cycle : 2*1 +1*2+ 2*3 = 10
- Avg CPI : 10/5 = 2
2의 방식으로도 구해보기
Performance 를 따질 때 고려할 것들
MIPS = 1초에 몇 백만 개의 명령어가 실행되는지
> 많이 실행되면 좋을까?
- 프로그램이 어떤건지
- 어떤 명령어로 구성되어 있는지 를 따져보았을 때,
1초에 많이 실행한다고 좋은 게 아닐 수도 있다.
이것도 비슷한 맥락
MIPS 와 MFLOPS가 높은 것이 (많은 것이) 좋은 성능의 척도는 아니다.
CPU Time 은 다음 4가지에 영향을 받는다.
1) 알고리즘 : ex) sorting 알고리즘에서 종류에 따라 IC가 다름, CPI도 달라질 것임.
2) 프로그램 : 어떤 프로그램이냐에 따라 IC, CPI가 달라진다.
3) 컴파일러 : IC, CPI에 따라 달라진다.
4) ISA : IC, CPI, Tc에 따라 달라진다.
→ 이 4가지 모두를 고려해야 좋은 프로그램을 만들 수 있다~!
(출처)
한동대학교 용환기 교수님 - 컴퓨터구조