본문 바로가기
2023-2/컴퓨터 구조

컴퓨터 구조의 핵심 개념과 성능 최적화 전략

by 철없는민물장어 2023. 10. 3.
728x90
반응형

이 장에서는...

 

CPU 설계, CPU 파이프라이닝, 메모리(캐시) 계층구조, 스토리지 설계 등을 배운다.

- 컴퓨터 시스템의 기능과 성능이 무엇으로 인해 결정되는지?

- 컴퓨터 구조(HW)와 SW사이의 어떤 상호작용이 있는지?

- 어떻게 high-level 언어가 머신language로 변환되는가?

- HW, SW 인터페이스

- 프로그램 성능은 어떻게 올리는지?

 

무어의 법칙: CPU의 성능이 약 매 1.5~2년마다 2배씩 증가한다.

황의 법칙: DRAM 용량이  매3년마다 4배가 됨

성능에 영향을 주는 것

 

  • 알고리즘이 source-level statements의 수를 결정
  • language/compiler/architecture(CISC, RISC)가 머신레벨 instruction의 수를 결정한다.
  • CPU와 메모리
  • OS 시스템
더보기

CISC

복잡한 명령어 셋을 가진 컴퓨터

하나의 명령어가 복잡한 일을 수행한다.

메모리로부터 값을 로드해와서 연산하고 다시 스토어하는 등,,.

그래서 적은 명령어로 일을 수행할 수 있음

 

RISC

간단한 명령어 셋을 가진 컴퓨터

메모리로부터 값을 로드해오기 / 연산/ 스토어하기 각각 명령어로 구현

디코딩과 실행이 빠름

 

컴퓨터 종류

-데스크탑

: 한명이 사용하기 좋은 가성비 좋은 컴퓨터

-서버

: 많은 유저가 동시에 사용하고 큰 프로그램을 실행해야 함. 신뢰성과 보안성이 특히 중요함.

- 슈퍼컴퓨터

: 많은 CPU를 사용하고 대용량 메모리 사용. 고성능 고비용임. 특정 문제를 해결하는 데 사용함(기상청 슈퍼컴퓨터)

- 임베디드

: 디바이스에 내장되어 정해진 특정 일을 수행함

최소한의 퍼포먼스만 만족하면 됨.(가성비를 위해)

가격제한이 엄격함. 전력소비가 적어야함. 결함 내성이 있어야함.(어느 부분이 고장나더라도 계속해서 작동해야함. 비행기 등)


컴퓨터 구조 8개의 키워드

 

1. 무어의 법칙

: 반도체의 집적도가 1.5~2년마다 2배씩 증가(성능향상)

 

2. 설계를 단순화하기 위해 추상화함.

 

3. Make the common case fast: 일반적으로 빈번하게 일어나는 일을 빠르게 만듦으로써 성능을 최적화.

 

4. parallelism(병렬 처리)

: 여러 작업을 동시에 수행하여 전체적인 처리 속도를 높이는 방법

 

5. 파이프라이닝

: 하나의 명령어를 여러 단계로 나누어 동시에 실행하는 기술

 

6. prediction(예측)

: 프로세서가 분기(조건문 등)를 예측하여 미리 해당 분기의 결과를 계산하고 실행하는 기술

 

7. Hierarchy(계층 구조)

: 메모리 시스템에서 캐시와 메모리 계층 구조. 데이터 이동을 최적화.

 

8. Dependability(신뢰성)

: 시스템이 예상대로 동작하고 중요한 상황에서 안정적으로 작동하는 능력

 


프로그램은...

 

하드웨어) 시스템 소프트웨어) 어플리케이션 소프트웨어)

 

- Application software

: 하이레벨 언어로 써짐.(C, JAVA..)

 

- System software

: OS - 유저 프로그램과 하드웨어의 인터페이스를 관리하는 프로그램. 

CPU,메모리,스토리지 할당, I/O 처리, 여러 어플리케이션에서 자원 공유 등

 

Compiler - 하이레벨 언어로 쓴 프로그램을 하드웨어가 실행할 수 있는 명령어로 변환

 

- Hardware

: CPU, memory, I/O controllers

 


 

Level of Program Code

 

1. High-level language

: 사람이 이해하기 쉽게 작성됨. 자연어에 가깝게 생각 가능.

추상화 수준이 높음

생산성이식성이 높음

유지보수성 좋음. 

컴퓨터에 종속적이지 않음.

 

컴파일러를 통해 어셈블리어로 변환됨.

이 때 컴파일러는 CPU마다 다르고, 같은 CPU라고 하더라도 고수준 언어를 어셈블리어로 바꾸는 방법은 one-to-many이므로 다른 결과가 나올 수 있음.

2. Assembly language

: 명령어가 문자로 표현된 마지막 단계.

 

어셈블리어에서 바이너리코드로는 one-to-one으로, 같은 어셈블리어라면 같은 바이너리코드로 변환됨

 

어셈블러를 통해 하드웨어 표현으로 변환됨

3. Hardware representation

이진 코드로 표현. 

 


컴퓨터란?

 

- 프로세서(datapath 데이터경로+ control제어)

- 메모리(SRAM 캐시, DRAM 메인메모리, 스토리지 HDD/SSD, CD/DVD)

- input(마우스,키보드)

- output(display, printer)

- 네트워크 연결

 

Datapath + Control = Processor(CPU)

- Datapath: 데이터경로. 데이터의 흐름을 다루는 부분.

레지스터, ALU(산술 논리 장치), 레지스터 전달 경로 등이 포함됨.

ALU는 데이터 연산을 수행하고, 레지스터는 데이터를 저장함. 

또한 레지스터 전달 경로는 데이터를 레지스터 간에 이동시키는 역할을 함.

(Execute, Interconnect, Load Data)

명령어 실행하기

로드,스토어 

 

-Control: 제어. 명령어의 실행 흐름을 제어함. 이 부분에서는 제어 신호들이 생성되고 관리됨.

예를 들어, 어떤 연산을 수행할지, 어떤 레지스터를 사용할지, 어떤 조건에서 분기할 지 결정함.

(Decide, Decode, Issue signals)

명령어 해석하기

다음 명령어가 무엇인지 결정하기

액티브시그널 보내기

 

 

CPU 실행과정

1. Fetch

: 가져오기. 프로그램이 저장된 메모리에서 다음 실행할 명령어를 가져온다.

(메모리에 명령어와 데이터가 함께 들어있다. 32비트 이진코드로)

 

2. Decode

:해석. control이 가져온 명령어를 해석하고, 해당 명령어가 어떤 작업을 수행해야하는지 판단함. 

(어떤 연산을 수행할지, 어떤 레지스터나 메모리를 사용할지)

 

3. Exec

:실행. datapath가 해석된 명령어를 기반으로 실제로 해당 작업을 수행함.

 

위 3단계를 반복적으로 수행하는 3단계 파이프라이닝.


ISA(Instruction Set Architecture)

 

ISA는 추상 인터페이스다. 하이레벨 하드웨어와 로우레벨 소프트웨어 사이의. 기계어(이진코드) 프로그램을 쓰기위해 필요한 모든 정보를 둘러싸는..

- 명령어 집합 정의: 프로세서가 이해할 수 있는 명령어 집합.

- 레지스터와 메모리 구조 정의: 레지스터의 개수와 종류, 메모리 주소 체계 등을 정의함.

- 명령어의 동작과 실행 순서 정의: 각 명령어가 어떤 동작을 수행하며, 실행 순서는 어떤지 정의함.

 

ISA와 operatin system interface를 합쳐 ABI(Application Binary Interface)라고 함.

: 이것은 운영체제와 응용 프로그램이 서로 상호 작용 할 수 있도록 하는 표준 인터페이스임.

 

MIPS ISA 특징

Instruction Categories명령어 카테고리:

- Computational 계산

- Load/Store 메모리접근

- Jump and Branch 분기(Go to/ if/ while)

- Floating Point 실수연산

- Memory Management

- Special

 

 


Performance Metrics

- System Purchasing perspective: 소비자 입장

성능, 가격, 가성비?

- System Design perspective: 설계자 입장

성능향상? 가격? 가성비?

 

우리는 어떤 요소가 성능향상에 얼마나 기여하는지 알아야하겠다.

 

- 알고리즘: 실행되는 연산의 개수를 결정한다.

- 프로그래밍 언어, 컴파일러, 아키텍쳐: 기계어 라인수를 결정한다.

- OS

- CPU, memory, I/O

 

Defining Performance

- CPU execution time for a program(CPU 실행시간)

: 특정 프로그램이 CPU에서 실행되는데 걸리는 시간. 

더 적은 시간이 소요될수록 빠른 성능을 가짐

 

- Instruction count(명령어 개수)

: 프로그램이 실행될 때 필요한 명령어의 총 개수. 

명령어 개수가 많을수록 더 많은 작업이 필요하므로 공간 요구가 높아질 수 있다.

 

- Clock cycles per instruction: CPI(명령어당 클락사이클)

: 각 명령어가 실행되는데 필요한 클락 사이클 수.

클락 사이클은 CPU가 한 번의 작업을 수행하는데 필요한 최소 시간 단위임.

CPI가 낮을수록 더 효율적으로 작업을 수행하는 것임.

 

- Clock cycle time(클락 사이클 시간)

: CPU가 한 번의 클락 사이클을 완료하는 데에 소요되는 시간을 나타냄.

더 짧은 클락 사이클 시간이면 더 빠른 처리 속도를 가진다고 할 수 있음.

 

execution time vs throughput

실행시간 대 처리량. 하나의 작업을 빠르게 처리하는것이 중요한 경우 실행시간이 중요함(임베디드,데스크탑)

throughput은 단위 시간당 처리량으로, 시스템이 얼마나 많은 작업을 동시에 처리하는지 나타냄.

따라서 서버는 throughput으로 성능측정을 하는것이 좋을 수 있음

 

퍼포먼스를 최대화하기 위해 실행시간을 줄이는것이 필요.

performance = 1/ execution_time

 

성능 비교시

 

performance_x / performance_y = executionTime_y / executionTime_x = n

으로 표현. 이는 x가 y보다 n배 빠르다는 것을 나타냄.

 

ex) A컴퓨터가 프로그램을 10초간 실행하고, B컴퓨터가 같은 프로그램을 15초 실행했다면 A는 B보다 얼마나 빠른가?

performance_A / performance_B = 15초/10초 = 1.5

따라서 A는 B보다 1.5배 빠르다

 

Measuring Execution Time

- Elapsed time(경과시간)

: 작업이 완료될 때까지의 총 시간. 

외부 요소(I/O 대기시간, OS 스케줄링, 프로세싱 등 모든것을 포함함)

 

- CPU time

: 순수하게 CPU가 실제로 작업을 수행하는 데 소요된 시간.

user CPU time, system CPU time으로 나뉨

 

CPU time이 컴퓨터구조에서는 더 중요하다. 경과시간은 디바이스에 의존하는 면이 있기 때문.

 

 

Performance Factors

CPU execution time for a program = #CPU clock cycles for a program * clock cycle time

= #CPU clock cycles for a program / clock rate

 

CPU 실행시간 = CPU 클럭사이클 수 for a program x 클럭 사이클 시간

 = CPU 클럭 사이클 수 for a program x (1/클럭 속도)

 

(** 클럭 시간은 일반적으로 sec, nsec 단위로, 클럭 속도는 초당 클럭 사이클 횟수로 헤르츠(Hz) 단위로 표현함.)

 

ex) 한 프로그램이 A컴퓨터에서 2GHz 클락으로 10초동안 실행되었다. B컴퓨터는 A보다 1.2배 많은 클락 사이클을 가졌을 때, B컴퓨터에서 해당 프로그램을 6초동안 실행했다면 B의 클락속도는?

 

A의 CPU time = #CPU clock cycles / 2GHz = 10 sec 

=> #CPU clock cycles = 10 sec x 2x2^9 cycle/sec = 20*10^9 cycles.

B의 CPU time = 6 sec = 1.2 x 20*10^9 cycles / clock rate

=> clock rate = 1.2 x 20* 10^9 cycles / 6 sec = 4GHz

 

#CPU clock cycles for a program = #Instructions for a program x Average clock cycles per instruction

프로그램의 CPU클럭 사이클 수 = 프로그램의 명령어 수 x 평균 명령어당 클럭 사이클 수(평균 CPI)

 

=> CPU time = CPU 클럭 사이클 수 x 클락사이클 시간

= 프로그램의 명령어 수(IC) x 평균 명령어당 클럭 사이클 수(CPI) x 클럭사이클 시간

ex) A컴퓨터와 B컴퓨터가 같은 ISA를 사용. 컴퓨터A는 250ps의 클락사이클시간, 2.0의 평균CPI임

컴퓨터B는 500ps의 사이클시간, 평균 1.2의 CPI임. 어떤 컴퓨터가 얼마나 빠를까?

두 컴퓨터는 같은 프로그램을 실행하므로 프로그램의 명령어 수 IC는 같다고 하면..

A의 CPU time = IC x 2.0 x 250 ps = IC x 500ps 

B의 CPU time = IC x 1.2 x 500ps =  IC x 600ps

 

728x90
반응형

'2023-2 > 컴퓨터 구조' 카테고리의 다른 글

Processor Architecture  (0) 2023.10.29
ISA for MIPS  (0) 2023.10.13

댓글