티스토리 뷰


이 포스트는 「"Computer Organization and Design -The hardware / software interface"

by Patterson and Hennessy, 5th edition, 2013.」을 참고하여 작성했습니다.



Comparing Performance

성능의 기준은 무엇일까? 이전 강의에서 Respose time, Throughput 등 성능을 측정하는 기준에 대해 살펴봤다.
실제로 성능의 기준은 여러가지가 될 수 있지만 이번 강의에서는 오직 Response time을 기준으로 할 것이다.

Response time 을 기준으로 성능을 살펴보았을 때 성능이 우수하다는 것은 결국 작업이 빨리 끝나는 것이다.
즉, 실행시간이 짧을 수록 성능은 높다고 말할 수 있다.

식으로 나타내면 [그림1.1]과 같다. 만약 X의 성능이 Y의 성능보다 n time 만큼 빠르다면 아래와 같이 나타낼 수 있다.

그림 1.2

예를 들어 하나의 프로그램을 하나 실행한다고 해보자.
A라는 CPU는 10초가 걸리고 B라는 CPU는 15초가 걸린다면 15s/10s=1.5 이므로
A는 B보다 1.5 time이 빠르다는 것을 계산할 수 있다.


Measuring Execution Time

-Elapsed Time

시작부터 종료까지의 총 소요시간을 의미한다. 프로세싱, I/O, OS 오버헤드, idel time 등 모든 요소를 고려한 값이다.
시스템 성능을 정의하며 매우 유용한 값이지만 다른 요소들도 고려한 값이므로 성능을 측정하기에는 적합하지 않다.

-CPU Time

주어진 작업에 대해 CPU에서 작업을 수행하는 시간을 의미한다. I/O 등 외부 요소를 고려하지 않는다.
'user CPU time' 과 'system CPU time'으로 이루어져 있다. 우리는 CPU비교에 초점을 맞추기에 오직 'user CPU time'만 고려할 것이다.


이제 User CPU time을 측정하는 방법에 대해 학습할 것이다.

CPU에는 clock이라는것이 존재한다. 사람이 심장박동을 통해 온 몸에 혈류를 공급하듯이 CPU는 clock을 통해 모든 작업을 수행한다. clock은 다른 말로 cycle이라고도 한다.

그림 1.3

Clock frequency(=Clock rate)는 cycles per second 의미한다.
예를들어 4.0 GHz의 Clock rate를 갖는다면 이는 4000 MHz이며 4.0 * 10^9Hz이므로 4*10^9 cycle/sec을 갖는다.

Clock period는 Clock rate의 inverse한 개념이다. 1사이클의 주기를 의미한다.
1/clock rate로 계산할 수 있다. 4GHz는 250ps가 된다.

CPU 성능의 측정에는 여러 가지 요인이 존재한다.
성능을 측정하는 요인에는 어떤것이 있을까?

1. 실행되는 프로그램의 사이클 수
2. 프로그램의 명령의 개수
3. 초당 사이클 수(Clock rate)
4. 명령(instruction) 당 사이클수의 평균 개수
5. 초당 명령의 평균 개수

위 요소들 중 성능 비교가 가능하게 하는 요인은 무엇일까? 잠시 생각해보자.

정답을 먼저 말하자면 위 5개의 요소 전부 성능을 비교하는 요소로서 적합하지 않다. 하나씩 이유를 살펴보자.

1번.
Q. A라는 프로그램은 사이클이 100만 개고 B라는 프로그램의 사이클은 200만 개라고 할 때 어떤 것이 더 우수한 성능일까? 당연히 사이클 수가 적은 A일까? 
A. 아니다. 우리는 사이클의 개수만 알뿐 1cycle에 걸리는 시간을 알지 못한다. 그러므로 비교할 수가 없다.

2번. 
Q. A라는 프로그램의 instruction은 1000개, B의 instruction은 2000개 일 때 어떤 것이 더 우수할까?
A. 이것역시 instruction이 적다고 성능이 우수할 것이라 단정할 수 없다. 1 instruction에 걸리는 시간을 모르기 때문이다.

3번.
Q. A의 clock rate는 4 GHz이고 B는 3 GHz일 때 우수한 것은?
A. clock rate는 단순히 cycles per second를 의미한다. 우리는 프로그램의 연산의 개수를 모르고, 하나의 연산에 걸리는 cycle을 모르기 때문에 측정이 불가능하다.

4번.
instruction당 cycle의 수를 알더라도 우리는 연산의 개수를 모르고 1사이클에 걸리는 시간을 모르므로 측정할 수 없다.

5번.
초당 실행되는 연산의 개수를 알지라도, 우리는 연산의 개수를 모르므로 비교가 불가능하다. (CPU마다 컴파일하여 얻는 연산의 개수가 다르다.)

결국 CPU의 성능을 결정짓는 요소는 execution time(실행 시간)을 알 수 있다.


자 그럼 실행시간(CPU Time)을 계산하기 위해서는 어떻게 해야할까? 실행시간은 아래 식을 통해 계산할 수 있다.

그림 1.4 CPU Time

위 수식은 아래처럼 나타낼 수 있다.

그림 1.5 CPU Time

우리는 CPU Time(실행시간)을 줄일수록 좋은 성능을 얻게된다. 따라서 성능을 향상하는 방법에는
Clock cycle의 개수를 줄이는 것과, clock rate를 증가시키는 것이 있다. 그러나 이는 trade-off관계에 있다.

 

그림 1.6 

CPU Time에 대한 예시를 살펴보자.
A라는 컴퓨터는 2GHz clock에 10s CPU Time을 가진다.
우리는 B라는 컴퓨터를 A의 컴퓨터보다 빠르게 만들고 싶다. 10s의 CPU Time을 6s로 줄이려고 한다.
다만 clock rate을 증가시킨 다면 1.2배의 clock cycles을 갖게 된다.
B의 CPU Time이 6s가 되려면 B의 clock은 몇이 되어야 할까?

먼저 위에서 살펴보았던 CPU Time의 공식을 살펴보자.
CPU Time은 clock cycles * clock period이므로 A컴퓨터의 CPU Time은 아래와 같이 나타낼 수 있다.

A의 Clock rate는 2 GHz이므로 1사이클에 걸리는 clock period는 500ps가 된다. 따라서 아래와 같은 식을 얻을 수 있다.

위 식들을 이용하여 B의 Clock rate를 구해보자.

라는 식을 구할 수 있다. 즉 B의 CPU Time을 6s로 감소시키기 위해서는 B의 clock period는 250ps가 되어야 하며 B의 clock rate는 4 GHz가 되어야 한다는 결과를 얻을 수 있다.


Instruction CountCPI에 대해 살펴보자.

Instruction Count는 말 그대로 Instruction의 개수를 말한다. 이것은 프로그램의 코드, ISA, 컴파일러에 의해 다를 수 있다.

CPI란 Clock-cycles Per Instruction을 의미한다. CPU에 의해 결정되며 Averarge CPI는 Instruction의 조합에 따라 다르게 나타난다. 따라서 Average CPI를 계산하기 위해서는 Instruction의 종류와 cycle 수만으로는 알 수 없다.
Average CPI를 계산하기 위해선 프로그램 명령의 종류, 실행 횟수 등을 알아야 한다.

위에서 실행시간은 Clock cycle * Cycle Time에 결정된다고 배웠다.
Clock Cycle을 계산하는 방법은 아래와 같다.

그림 1.7

Clock Cycle은 명령의 개수 * 평균 CPI를 통해 계산할 수 있다. 이를 통해 다시 한번 실행시간을 아래처럼 나타낼 수 있다.

그림 1.8

CPI에 대한 예시를 살펴보자.

A컴퓨터의 Cycle time은 250ps이며 CPI는 2.0이다.
B컴퓨터의 Cycle time은 500ps이며 CPI는 1.2이다.

ISA와 프로그램이 같다고 할 때 A와 B 중 어떤 컴퓨터가 더 빠를까? 그리고 얼마나 빠를까?

위에서 사용했던 식들을 사용하여 실행시간을 계산해보자.
CPU Time=(Instruction count * CPI * cycle time로 나타낼 수 있다.

따라서 위와 같은 식으로 나타낼 수 있고 A는 I.C * 500ps이며 B는 I.C * 600ps이므로 A가 B보다 1.2 Times가 빠르다는 것을 확인할 수 있다.

CPI에 대한 예시를 하나 더 살펴보자.

그림 1.9

 

똑같은 컴퓨터에서 똑같은 HLL로 컴파일한 코드이다. A, B, C의 클래스를 각각 다른 연산이라고 생각하고 보자.
sequence 1과 2에서 어떠한 연산이 가장 많이 수행되며, 가장 빠를까?

먼저 sequence1에서의 Total instruction count는 5이며 sequence2에서의 total I.C는 6이다.
연산 자체로만 보면 sequence2가 1보다 많다.

연산별 CPI를 보자. A는 1, B는 2, C는 3이다. 우리는 I.C와 CPI를 알기에 Clock cycle를 계산할 수 있다.
sequence1은 10, sequence는 9이다 sequence1의 clock cycles이 더 많음을 볼 수 있다.

따라서 연산의 개수는 sequence2가 더 많았지만 clock cycles는 더 작으므로 실제 속도는 sequence2가 더 빠름을 알 수 있다.(clock rate가 같다는 조건)


우리는 성능을 계산할 때 오직 CPU Time만을 기준으로 삼았다.
그리고 CPU Time은 아래와 같이 나타낸다.

그림 1.10

결국 CPU Time은 Instruction count * CPI * Clock period이다.

각각의 요소에 영향을 미치는 요인들을 아래 표로 정리했다. 

그림 1.10

 

Lecture Note #3에 계속..

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함