2학년 2학기/컴퓨터 구조

[ 컴퓨터 구조 ] 19. Performance

쫑알bot 2023. 11. 12. 16:42
728x90

 

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이 몇번 도는지

 

 

Period = Time

 

 


 

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가지 모두를 고려해야 좋은 프로그램을 만들 수 있다~!

 

(출처)

 

한동대학교 용환기 교수님 - 컴퓨터구조