CPU와 성능

Application Software

하이레벨 언어로 쓰여진 프로그램. 일반적인 사람들이 쓰는 프로그램.

System software

OS, 컴파일러 등등 컴퓨터를 실행하는데 기본적인 소프트웨어.

하드웨어

프로세서, 메모리, I/O 컨트롤러

 

컴파일 과정: High-Level 언어 → (컴파일러)→ 어셈블리 언어 → (어셈블러) → 기계어

 

프로세서(CPU) 구성요소

  • DataPath
  • Control
  • Cache memory

Abstraction

  • 복잡한 문제를 처리하는데 도움을 줌. low-level의 디테일을 숨김
  • Instruction set Architecture (ISA): 하드웨어/소프트웨어 인터페이스. 명령어들의 집합
  • Application binary interfac: ISA + 시스템 소프트웨어 인터페이스
  • 구현
    • ISA가 이용하여 하드웨어와 소프트웨어가 서로 독립적이도록 만들어 줌.
    • SW는 ISA에따라 프로그램을 개발, HW는 ISA를 실행.

휘발성 메인 메모리: 전원 끄면 데이터 사라짐

비휘발성 second 메모리: 전원이 꺼져도 데이터가 사라지지 않음.

Performance

Response Time (latency): 하나의 일을 완료하는데 걸리는 시간

Throughput: 단위 시간동안 한 일들의 양

프로세서를 더 빠른 버전으로 바꾸면? → ResponseTime이 더 짧아지므로 Thoughput은 증가

프로세서를 더 추가했다 → ThroughPut 증가

따라서 CPU의 성능은 ResponseTime을 기준으로 함.

Relative Performance (상대적 성능)

Performance(성능) 정의 : 1 / Execution Time(실행시간)

아래 수식에 의해 X는 Y보다 n배 빠르다고 정의할 수 있음

 

Performance(성능)_X / Performance(성능)_Y = Execution time_Y / Execution time_X = n

Elapsed time (전체 걸리는 시간)

총 응답 시간 (Processing, I/O, OS overhead, idle time)

System Performance를 결정하는데 사용

CPU time

작업을 주었을때 실행하는 시간. I/O 및 다른 작업 시간 제외. 어떤 작업에 대해 CPU가 작업을 실행하는 시간만 의미

User CPU/ System CPU Time으로 나뉨.

CPU Clocking

Clock period

하나의 clock cycle에 걸리는 시간.

250ps = 0.25ns = 250 * 10^-12초

Clock frequency: 1초동안 일어나는 clock cycle의 횟수

4.0 GHz = 4000 MHz = 4.0 * 10^9 Hz (1초에 4.0 * 10^9만큼의 clock cycle이 일어남)

Clock rate(속도)

Clock period와 반비례 관계. Clock period가 증가하면(느리면), 속도가 감소

 

따라서 아래의 식이 성립한다.

CPU Time = CPU Clock Cycles * Clock Cycle Time = CPU Clock Cycles / Clock Rate

즉 CPU의 성능을 높이려면 CPU Clock Cycles의 수를 줄이고 (하나의 작업을 처리하는데 필요한 Clock의 수) Clock Cycle Time도 줄이면(하나의 Clock Cycle이 도는데 걸리는 시간. 펄스값이 위로 튀었다가 다시 내려오고 다시 튀는데까지 걸리는 시간) 된다.

하지만 보통 Clock rate가 증가하면 Clock Cycle의 수도 증가하게 되는 trade off 관계가 되므로 시스템 디자이너는 이를 고려해야 함.

 

CPI, Instruction Count

Clock Cycles = Instruction Count (명령어 수) * Cycles per Instruction (하나의 명령어를 실행하는데 필요한 사이클의 수)

CPU Time을 좀 더 자세히 쓰면…

CPU Time = Instruction Count * CPI * Clock Cycle Time

 

Instruction Count는 프로그램, ISA, 그리고 컴파일러에 의해 결정 됨. 프로그램의 알고리즘, ISA의 종류, 컴파일에 의해 결정 됨. ISA, 컴파일러는 하드웨어 종류에 따라 다른 어셈블리어로 컴파일 됨으로 인해서 그런듯

 

하나의 프로그램은 여러 종류의 명령어, 여러개의 명령어로 구성 되어 있음. 명령어에 따라 CPI 값은 다 다름. 따라서 성능을 알기위해 Average Cycles per Instruction를 사용함. 명령어들의 비율을 계산하여 CPI를 결정함. CPI는 CPU에 의해 결정 됨. 어떤 프로그램이 CPI를 작은 명령어인 A를 많이 사용한다면 CPI는 작을것이고, CPI를 큰 명령어인 B를 많이 사용한다면 CPI는 커지게 된다.

 

예시

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

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

같은 ISA 사용

어떤게 얼마나 더 빠른가?

 

A의 CPU Time = I (명령어 수)* 2.0 (하나의 명령어가 실행되는데 필요한 사이클의 수) * 250ps (사이클이 한번 실행되는데 필요한 시간) = I * 500ps

B의 CPU Time = I * 1.2 * 500ps = I * 600ps

따라서 A가 1.2배 더 빠름.

종합

CPU Time (성능) = (Instructions (명령어 개수) / Program) * (Clock cycles (하나의 명령어가 실행되는데 필요한 사이클의 수)/ Instruction) * (Seconds / Clock cycle) = Instruction Count * CPI * Clock Period

따라서 성능은 다음 네가지에 영향을 받음.

알고리즘

프로그래밍 언어

컴파일러

ISA

 

알고리즘을, 프로그래밍 언어, 컴파일러에 따라 왜 성능이 다른지를 CPU 수준까지 내려가서 설명해 주니 잘 이해되고, 왜 중요한지 알게 되었다.

'컴퓨터 구조' 카테고리의 다른 글

명령어 addressing  (0) 2023.06.30
함수 호출 작동 방식  (0) 2023.06.28
ISA, ABI, 명령어의 구조  (0) 2023.06.28
스택 포인터  (0) 2023.06.27
MIPS프로세서 명령어의 구조  (0) 2023.06.11