본문 바로가기

Computer Science/Computer Organization

[Lecture 8] Computer Performance

#성능의 정의

컴퓨터에서 성능이란 무엇일까? 아래 지표를 잠깐 살펴보자.

위에 지표를 보고 우리는 어느 하나의 비행기 모델이 가장 성능이 좋다고 할 수 있을까? 정확하게는 말할 수 없을 것이다. 이렇듯 컴퓨터에서도 컴퓨터의 성능을 측정하는 여러가지의 기준이 있다. 

#컴퓨터 성능: 시간

Response Time (latency): 작업을 완료하는 데 걸리는 시간

처리량 (throughput): 단위 시간당 완료된 총 작업 수

컴퓨터 리소스를 적게 이용
컴퓨터 시스템이나 응용 프로그램의 높은 이용

 

  • 컴퓨터의 성능 측정 기준은 다음을 포함한다:
    • 가용성
    • 반응 시간
    • 용량
    • 레이턴시
    • 완료 시간
    • 서비스 시간
    • 대역폭
    • 스루풋
    • 상대 효율
    • 비례 축소 가능
    • 속도 향상

 

등등 컴퓨터 성능을 나타낼 수 있는 여러 지표들이 있지만, 이번 포스트에서는 Response time, 즉 latency에 집중해보자.

#Execution Time

  • Elapsed Time
    • 모든 항목 카운트(디스크 및 메모리 액세스, I/O 등)
    • 유용한 숫자이지만 비교 목적으로는 좋지 않은 경우가 많다
  • CPU time
    • I/O 또는 다른 프로그램 실행에 소요된 시간을 계산하지 않음
    • 시스템 시간과 사용자 시간으로 나눌 수 있다
  • 우리는 유저 cpu time에 집중해보자
    • 프로그램에 있는 코드 행을 실행하는 데 소요된 시간

#Relative Performance

예제: 프로그램 실행에 소요된 시간

 

예를 들어 프로그램 A의 실행시간이 10초, 프로그램 B의 실행시간이 15초라고 가정해보자. 그렇다면 Execution TimeB / Execution TimeA = 15s / 10s = 1.5 이다. 그렇기 때문에 A는 B보다 1.5배 빠르다고 할 수 있다 (그리고 B는 A보다 2/3배 빠르다)

#CPU Clocking

디지털 하드웨어 요소의 작동은 constant-rate 클럭에 의해 제어된다

Clock period:시계 주기의 지속 시간

예: 250 ps = 0.25ns = 250+10^-12s

 

Clock frequency (rate): 초당 주기 (cycles per second)

예: 4.0GHz = 4000MHz = 4.0×109Hz

#CPU Time

  • 성능 향상을 위해선:
    • clock rate 증가
    • 클럭 주기 수 감소
    • 그렇기 때문에 하드웨어 설계자는 클럭 속도를 사이클 수와 비교해야 한다.

#CPU Time 예제

컴퓨터 A: 2GHz 클럭, 10초 CPU 시간(특정 프로그램을 실행하기 위해)

 

  • 컴퓨터 B를 디자인해보자:
    • 6초 CPU 시간 목표(동일한 프로그램 실행)
    • 클럭 속도를 높일 수 있지만 클럭 주기를 20% 늘려야 한다

Computer B의 clock은 얼마나 빨라야 할까?

프로그램에 몇 사이클이 필요할까?  

사이클 수가 명령 수와 같다고 가정해도 될까?

안된다. 다른 명령들은 같은 기계에서 다른 수의 사이클을 필요로 할 수 있다. 또한, 동일한 명령이 다른 기계에서 다른 수의 사이클을 필요로 할 수 있다. 이것들은 기계 명령이지, C 코드의 행이 아니라는 것을 기억해야 한다. 이제 사이클을 어느 정도 알아봤으니 다음을 한번 보자.

 

  • 주어진 프로그램은 다음을 필요로 할 것이다
    • 몇 가지 지침(기계 지침)
    • 몇 번의 주기
    • 몇 초
  • 우리는 이 수량과 관련된 단어를 알아야 한다
    • cycle time (seconds per cycle)
    • clock rate (cycles per second)
    • CPI (cycles per instruction)
      • 부동 소수점 집약적 애플리케이션의 CPI가 더 높을 수 있음
    • MIPS (millions of instructions per second)
      • 이것은 간단한 명령어를 사용하는 프로그램의 경우 더 높을 것이다

#Performance

성능은 실행 시간에 따라 결정된다. 다른 변수 중 성능과 동일한 변수가 있나? 

  • 프로그램을 실행할 사이클의 수는?
  • 프로그램의 지시사항?
  • 초당 사이클 수?
  • 명령당 평균 주기 수는?
  • 초당 평균 명령 수는?

#CPI 예제

컴퓨터 A: Cycle Time = 250ps, CPI = 2.0

컴퓨터 B: Cycle Time = 500ps, CPI = 1.2

똑같은 ISA

 

주어진 프로그램의 경우, 어느 것이 얼마나 더 빠른가?

#CPI in More Detail

다른 명령 클래스가 다른 사이클 수를 사용하는 경우:

가중평균CPI:

#CPI Example

클래스 A, B, C의 명령어를 사용하여 컴파일된 대체 코드 시퀀스가 있다고 가정하자

  • Sequence 1: A B C A C
    • IC = 5
    • Clock Cycles = 2×1 + 1×2 + 2×3 = 10
    • Average CPI = 10/5 = 2.0
  • Sequence 2: A B A A C A
    • IC = 6
    • Clock Cycles = 4×1 + 1×2 + 1×3 = 9
    • Avg. CPI = 9/6 = 1.5

# of Instructions Example

컴파일러 설계자가 특정 컴퓨터에 대한 두 코드 시퀀스 중 하나를 결정하려고 한다고 하자. 하드웨어 구현에 따라 클래스 A, 클래스 B, 클래스 C의 세 가지 다른 종류의 명령이 있으며 각각 한 번, 두 번, 세 번의 사이클이 필요하다.

 

첫 번째 코드 시퀀스는 A의 2개, B의 1개, C의 2개의 명령어를 가지고 있다.
두 번째 코드 시퀀스는 A의 4개, B의 1개, C의 1개의 6개의 명령어를 가지고 있다.

 

어떤 시퀀스가 얼마나 더 빠를까? 각 시퀀스의 CPI는 무엇일까?

 

풀이:

첫 번째 코드 시퀀스의 cycle 횟수: 10

두 번째 코드 시퀀스의 cycle 횟수: 9

 

그렇기 때문에 첫번째 시퀀스가 10/9 = 1.11 만큼 빠름

또한 첫 번째 시퀀스의 CPI는 10/5 = 2

두 번째 시퀀스의 CPI는 9/6 = 1.5

#MIPS example

두 개의 다른 컴파일러는 각각 한 사이클, 두 사이클, 세 사이클이 필요한 클래스 A, 클래스 B, 클래스 C의 세 가지 명령어를 사용하여 4GHz 기계에 대해 테스트되고 있다. 두 컴파일러 모두 큰 소프트웨어용 코드를 생성하는 데 사용된다고 가정해보자.

 

첫 번째 컴파일러의 코드는 500만 개의 클래스 A 명령어와 100만 개의 클래스 B 명령어와 200만 개의 클래스 C 명령을 사용한다

 

두 번째 컴파일러의 코드는 클래스 A 명령어 1000만 개, 클래스 B 명령어 100만 개, 클래스 C 명령어 100만 개를 사용한다

 

MIPS에 따르면 어떤 시퀀스가 더 빠를까?

답: sequence 1: 2.46 *10^3 MIPS, sequence 2: 3.2 *10^3 MIPS
실행 시간에 따르면 어떤 시퀀스가 더 빠를까?

답:  sequence 1: (15 * 10^6) / (4 * 10^7) = 0.00325 sequence 2: (15 * 10^6) / (4 * 10^9) = 0.00375

#Amdahl's Law

 컴퓨터 시스템의 일부를 개선할 때 전체적으로 얼마만큼의 최대 성능 향상이 있는지 계산하는 데 사용된다. 병렬처리 프로그램에서 차례로 수행되어야하는 비교적 적은 수의 명령문들이, 프로세서의 수를 추가하더라도 그 프로그램의 실행을 더 빠르게할 수 없도록 속도향상을 제한하는 요소를 갖고 있다는 것이다진 암달의 이름에서 따왔다. 론(theory)만 많은 컴퓨터과학 분야에서 몇 안 되는 법칙(Law)이다

Execution Time After Improvement = Execution Time Unaffected + ( Execution Time Affected / Amount of Improvement)

예제:

한 프로그램이 기계에서 100초 만에 실행된다고 가정하자, 이 시간의 80초를 담당하는 곱셈 명령어가 있다.

프로그램이 4배 더 빨리 실행되도록 하려면 곱셈 속도를 얼마나 향상시켜야 할까?

25 = (100-80) + (80/x)

25 = 20 + 80/x

5 = 80/x

x = 80/5 

=16


5배 더 빨리 하는 건 어떨까?

20 = (100-80) + (80/x)

20 = 20 + 80/x

0 = 80/x

x = 80/0 

 

불가능하다

 

예제1:

모든 부동소수점 명령어를 5배 더 빨리 실행하도록 기계를 개선한다고 가정하자.

부동소수점 향상 전 일부 벤치마크 프로그램의 실행 시간이 10초라면, 10초 중 절반이 부동소수점 명령을 실행하는 데 소비된다면 속도가 얼마나 빨라질까?

x = (10-5) + (5/5)

= 5 + 5/5 = 6

10/6 = 1.67

 

예제2:

우리는 위에서 설명한 새로운 부동소수점 단위를 보여주기 위한 벤치마크를 찾고 있으며, 전체 벤치마크가 3의 속도 향상을 보여주기를 원한다(즉, 실행하는 데 1/3이 걸린다).

우리가 고려하고 있는 하나의 벤치마크는 오래된 부동소수점 하드웨어로 90초 동안 실행된다.

이 벤치마크에서 원하는 속도를 높이기 위해 부동소수점 명령이 이 프로그램에서 얼마나 많은 실행 시간을 고려해야 합니까?

 

30 = (90 - x) + (x/5)

30 = 90 - x + x/5 = 90 - 4x/5

-60 = -4x/5

300 = 4x 

x = 75

 

60/3 - (60 - x) + (x/4)

#Performance Summary

  • 성능은 특정 프로그램에만 적용된다.
    • 총 실행 시간은 일관된 성능 요약이다.
  • 주어진 아키텍처에서 성능 향상은 다음과 같다
    • 클럭 속도 증가(CPI에 악영향을 미치지 않는 경우)
    • CPI를 낮추는 프로세서 조직 개선
    • CPI(명령어의 다른 분포) 및/또는 명령 수를 낮추는 컴파일러 향상 기능
    • 명령 수 및/또는 명령 분포에 영향을 미치는 알고리즘/언어 선택
    • 주의: 기계 성능의 한 측면의 개선이 전체 성능에 영향을 미칠 것으로 예상하면 안된다

  • 성능에 다음에 따라 달라질 수 있다:
    • 알고리즘: IC에 영향을 미치며, CPI에도 영향을 미칠 수 있음
    • 프로그래밍 언어: IC, CPI에 영향을 미친다
    • 컴파일러: IC, CPI에 영향을 미친다
    • 명령 집합 아키텍처: IC, CPI, Tc에 영향을 미친다

#Benchmarks

벤치마크: 컴퓨터, 스마트폰 등 전자기기의 연산성능을 시험하여 수치화하는 것을 말하는 단어. 특히 전산용어로써 벤치마크는 여러 가지 전자기기의 성능을 비교 평가하는 의미의 동사로 쓰이고 있으며 주로 소프트웨어보다는 하드웨어 부분에 많이 적용되고 있다. 일반적으로 국내에서 벤치마크라고 하면 99% 이 쪽 용례를 뜻한다.

컴퓨터 게임 상에서 종종 보이는 벤치마크 기능은 이를 보여주기 위해 게임의 엔진이 구현할 수 있는 최상급의 환경을 조성한 뒤, 사용자의 컴퓨터로 구동해보는 것을 말한다. 쉽게 말해 벤치마크는
컴퓨터 성능 비교에 사용하도록 선택된 프로그램 또는 프로그램 모음이다.

 

  • 벤치마크 종류들:
    • Kernels (e.g. matrix multiply)
    • Toy programs (e.g. sorting)
    • Synthetic benchmarks (e.g. Dhrystone)
    • Benchmark suites (e.g. SPEC06fp, TPC-C)

벤치마크를 사용하여 하드웨어 성능의 다양한 측면을 분리할 수 있다.

#SPEC Integer Benchmarks

SPECINTC 2006 벤치마크는 2.66GHz Intel Core i7920에서 실행된다. 35페이지의 방정식이 설명하듯이 실행 시간은 이 표의 세 가지 요소, 즉 수십억 단위의 명령 수, 명령당 클럭 수(CPI), 나노초 단위의 클럭 사이클 시간의 곱이다.

 

SPEC 비율은 단순히 SPEC에 의해 제공되는 기준 시간을 측정된 실행 시간으로 나눈 값이다. SPECINTC 2006으로 인용된 단일 숫자는 SPEC 비율의 기하학적 평균이다

#Single-processor Evolution

#The Power Wall

Intel (당시)부사장 (현)사장 Patrick Gelsinger (ISSCC 2001에서 발표 인용): 만약 현재의 속도로 스케일링이 계속된다면, 2005년까지 고속 프로세서는 원자로, 2010년까지 로켓 노즐, 2015년까지 태양 표면의 전력 밀도를 가질 것이다.