전공 과목/컴퓨터 구조

Lecture 03: Computer Abstractions and Technology - 2

arsenic-dev 2024. 9. 26. 22:13

경희대학교 김정욱 교수님의 컴퓨터 구조 수업을 기반으로 정리한 글입니다.

Measuring Performance

컴퓨터 구조에선 speed가 performance measuring의 기준이다.

 

※ Comparing performances may different depending on the situation

 

즉, 컴파일러를 어떻게 효율적으로 잘 하고, 하드웨어 디자인을 어떻게 잘 하느냐,

그래서 결국, 속도가 얼마나 빠르냐가 가장 중요하다.

 

There are a number of measurements of performance

  • Clock speed
  • CPI (Clock Cycles per Instrucion)
  • MIPS (Millions of Instructions per Second)
  • Etc.

※ 여기서 MIPS는 Lecture 03에서 다룬 assembly language와 의미가 다르다.

Performance (Time)

Performance를 속도라는 개념으로 잴 때에는, 시간,

더 디테일하게는 실행 시간(Execution time, Response time)이라는 개념을 사용한다.

 

실행 시간

한 프로그램당 일을 수행하는 데 걸리는 시간을 의미한다.

▶ For a computer X

▶ If performance X > Y

▶ If speed X > Y (×n times) -> Execution time Y > X (×n times)

Performance of CPU (Execution Time)

CPU가 instruction들을 처리하기 때문에,

Performance에서 CPU의 Execution Time도 굉장히 중요하다.

 

CPU execution time is related to

  • CPU Clock cycles: 클럭 사이클, CPU가 명령을 실행하기 위해 사용하는 기본적인 단위로, 사이클의 수를 나타낸다.
  • Clock cycle time: 각 클럭 사이클 하나가 걸리는 시간을 나타낸다.

※ 각각의 instruction당 필요한 clock cycle 개수가 다르다.

▶ clock cycle

 

※ Clock: On/Off 형태를 반복한 전류의 흐름을 이용하여 PC를 구성하는 부품을 작동시키는 신호로, 비트를 나타낸다.

 

CPU execution time

 

▶ CPU execution time

Performance of CPU (CPI)

Clock cycles Per Instruction (CPI)

instruction(명령)이 수행되기 위해 필요한 평균 clock cycle 개수

▶ CPU clock cycles = Instructions for a program × Average clock cycles per instruction

 

  • Instrucions for a program: Computer had to execute the instructions to run the program
  • Average clock cycles per instruction: Mainly depend on the CPU

※ instruction 중 lw, sw는 CPU 단독으로 처리할 수 없고 메모리에 왔다 갔다 해야 하기에 시간이 오래 걸리고, add와 같이 CPU 단독으로 처리할 수 있는 instrucion들은 처리 속도가 빠르다.

Performance of CPU

▶ ⭐ CPU performance equation -> CPU의 전체 소요되는 시간

 

※ CPU clock cycles = Instruction count × CPI

 

Example 1

▶ 예제 1, 단 Clock cycle time: 1s (1Hz)

 

위 그림 예제에서 Instruction = 3, CPI = 3, 그리고 주어진 조건인 Clock cycle time = 1s (1Hz)이기에, CPU time = 9s이다.

 

Example 2

Instructions (More instructions? Code sequence 1 < Code sequence 2)

  • Code sequence 1: 2+1+2=5
  • Code sequence 1: 2+1+2=5

CPU clock cycles (Faster? Code sequence 1 < Code sequence 2)

  • Code sequence 1: (2x1)+(1x2)+(2x3)=10
  • Code sequence 2: (4x1)+(1x2)+(1x3)=9

▶ CPU clock cycles

 

※ clock cycle이 많을 수록 빠른 게 아니라, 느린 거니 주의해야 한다.

 

Average CPI

  • Code sequence 1: 10/5=2
  • Code sequence 2: 9/6=1.5

▶ Average CPI

▶ Components of performance - Units of measure

 

Performance improved by

  • Reducing number of clock cycles
  • Increasing clock rate

instruction 개수를 줄이거나, CPI를 줄여 각각의 명령어를 처리하는 데 시간을 적게하면,

최종적으로 clock cycle 개수가 줄어 CPU의 속도가 향상된다.

 

이때, cloock rate를 높여 clock cycle time을 줄여도 CPU의 속도를 향상시킬 수 있다.

Understanding Program Performance

1. Algorithm (Instruction count, CPI)

코드를 잘 짜면 컴파일링도 잘 되고, instruction 개수도 줄어들어 CPI도 줄어든다.

즉, 어떤 알고리즘을 짜느냐에 따라 속도가 달라진다.

 

CPU가 코드를 이해할 때 번역하는 과정에서 instruction이 많다는 것은 번역을 더 많이 해야되는 것을 의미하기에,

속도가 느려질 수밖에 없다. 

▶ vs

 

※ 곱셈, 나눗셈이 덧셈, 뺄셈보다 instruction 개수가 커서 느리다.

 

※ 곱셈은 계속 더하는 것이고, 나눗셈은 계속 빼는 것인데, 이때 나눗셈에선 빼도 되는지 확인하는 추가적인 과정이 있어서 곱셈보다 더 느리다. 즉, 나누기가 많을 수록 CPI가 올라간다.

 

2. Programming language (Instruction count, CPI)

사용하는 프로그램 언어에 따라 instruction 개수가 달라진다.

ex) C는 Python보다 속도가 빠르다.

 

ex) 어떤 함수를 구현할 때 지원하지 않는 기능이 없으면 instrucion 개수가 컴파일링 했을 때 더 많아질 수 밖에 없으며, 애초에 다른 instruction(명령어)를 사용하기에 CPI도 달라질 수밖에 없다.

 

3. Compiler (Instruction count, CPI)

좋은 컴파일러란?

 

high-leve language를 그대로 바꾸는 게 아니라,

이 정도만 있으면 되겠다,

혹은 reordering, 즉 instruction끼리 자리를 바꾸면서 효율적으로 컴파일링을 할 수 있는 것이다.

 

즉, instruction count를 줄이고, CPI도 낮추는 컴파일러가 좋은 컴파일러다.

 

4. Instruction set archtecture (ISA) (Instruction count, clock rate, CPI)

덧셈, 곱셈 등의 약속들을 CPU에 정해둔 것,

즉 명령어 집합구조이며, 아이사라고 한다.

ex) 명령어: lw, sw, jr, multi, add

 

ISA 종류에 따라서 컴파일링할 수 있는 instruction 종류가 달라지고, 그러면서 instruction count도 달라진다.

ex) 크기가 작은 embedded 환경에서는 속도가 느린 곱셈이 없고, 더하기로만 있을 수도 있다.

 

※ 목적에 맞게 ISA를 선택한다. ex) 경량화, 데스크탑에서 사용 가능

 

 
 

참고

The Power Wall

CPU의 생명인 clock rate를 높이면, Power 소모량도 많아지기에 무작정 clock rate를 높이는 게 아니라 일정 수준에서 현재 유지하고 있다.

 

CPU 성능과 performance간의 관계

CPU 성능이 좋아지면, 즉 clock rate가 빨라지면 clock cycle은 낮아지기 때문에 ,

CPU time이 줄어 든다, 즉 performance도 점차적으로 좋아진다.

MIPS (Million Instructions Per Second)

1. MIPS

여기서 말하는 MIPS는 ISA를 만든 회사 중 하나인 MIPS가 아니라,

1초당 몇 100만(10^6) 개의 instruction들을 처리할 수 있는지를 나타내는 단위이다.

 

MIPS로 한 프로그램을 실행 시킬 때 필요한 Instruction 개수를 구할 수 있다.

▶ MIPS 계산

 

※ 실제 프로그램에서 Instruction 개수는 매우 많기에 million 단위로 나눠주는 것이다.

▶ CPU time = Execution time (CPU가 처리하는 시간), Clock cycle time을 Clock rate의 역수로 표현해준 것이다.

 

Example

▶ MIPS 계산 예제

 

여기서 Clcok rate은 4 × 10^9, CPI는 1이므로, MIPS는 4 × 10^3이다.

 

※ 10 billion = 10^9

 

※ 단위

  • 1 kHz(킬로헤르츠) = 10^3 Hz
  • 1 MHz(메가헤르츠) = 10^6 Hz
  • 1 GHz(기가헤르츠) = 10^9 Hz

2. Three issues of using MIPS

(1) MIP는 명령어 실행 속도를 의미하는 것이지, 명령어 하나, 즉 각각이 얼마나 많은 일을 수행하는지는 알 수 없다.

▶ MIPS vs speed of Instruction 예시

 

MIPS는 A 컴퓨터가 B 컴퓨터보다 빠르더라도 Speed of Instruction 2는 B가 더 빠르다.

즉, 명령어 각각의 속도는 B 컴퓨터가 A 컴퓨터보다 빠를 수 있다.

▶ MIPS 계산

(2) 같은 컴퓨터에서도 어떤 프로그램을 실행하느냐에 따라 MIPS 값은 다르다.

같은 컴퓨터라는 것은 같은 CPU로 연산된다는 것이기에 Clock rate는 같다.

하지만 프로그램당 CPI(Instruction)는 다르기에 같은 컴퓨터일지라도 프로그램마다 MIPS 값은 다른 것이다.

▶ MIPS, CPI 계산

 

(3) If a new program executes more instructions but each instrction is faster, MIPS can vary independently from performance

 

프로그램 A 보다 프로그램 B가 instruction 개수가 더 많더라도

B가 상대적으로 clock cycle이 적게 소요되는 instruction들을 사용한 프로그램이라면,

B의 CPU clock cycles가 더 작을 수 있다.

 

이런 경우, CPI는 instruction을 처리할 때 필요한 clock cycles의 평균이기에 B가 더 CPI가 작게 된다.

 

즉, 어떤 프로그램이 instruction 개수가 더 많더라도 MIPS 값은 더 클 수도 있다. (단, same clock rate)

 

물론, CPU 자체가 성능이 안 좋아서 CPI가 작음에도 불구하고, Clock rate가 너무 느려 MIPS 값이 작을 수도 있다.

 

MIPS 값 높이는 방법

  • Clock rate 높이기
  • CPI 낮추기

▶ MIPS 계산식

▶ CPI 계산

▶ Execution time(실행 시간), it is a reliable measure of performance