👩‍💻 알고리즘/🎛️ 컴퓨터 구조 & OS

[혼공학습단 12기] 5장, CPU 성능 향상

오브 🧙‍♂️ 2024. 7. 21. 14:58

" 클럭 "

- 조금이라도 빠른 CPU를 설계하려면? => 클럭 속도를 빠르게 높이면 된다.

- 클럭속도만 올리면 빠른 CPU가 되는가? => X. 발열문제가 더 심각해질 뿐

- Hz 단위로 측정, 1초에 클럭이 몇 번 반복되는지 체크

 

- 클럭 속도를 높이는 데에는 클럭 말고 코어와 스레드 수를 늘리는 방법이 있다. 

 

" 코어 "

명령어를 처리하는 일꾼이 여러 명 있는 것

 

- 명령어를 실행하는 부품으로 CPU 안에 여러 개 포함되어 있다.

- 코어를 여러 개 가지고 있으면 멀티코어 CPU / 멀티코어 프로세서라 부른다.

- 코어 개수만 올리면 빠른 CPU가 되는가? => X. 코어마다 연산이 분배가 되지 않으면 연산 속도는 증가하지 않는다.

 

" 스레드 "

실행 흐름의 단위

 

- CPU에서 사용되는 하드웨어적 스레드 / 프로그램에서 사용되는 소프트웨어적 스레드로 분류

하드웨어적 스레드 (=논리 프로세서)

- 하나의 코어가 동시에 처리하는 명령어의 단위

- 하나의 코어로 여러 명령어를 처리하기 위해서는 필요한 레지스터를 여러 개 가지고 있으면 된다. 

소프트웨어적 스레드

- 하나의 프로그램에서 독립적으로 실행되는 단위

155p 4번
코어

 

" 명령어 병렬 처리 기법 "

명령어를 동시에 처리해 CPU를 쉬지 않고 작동시키는 기법

 

1. 명령어 파이프 라이닝

명령어 처리 과정 : 명령어 인출 => 명령어 해석 => 명령어 실행 => 결과 저장

- 같은 단계가 겹치지 않는다면 각 단계를 동시에 실행할 수 있다. (EX. 뭐는 인출, 뭐는 해석, 뭐는 실행....)

- 공장처럼 명령어들을 명령어 파이프라인에 넣고 동시에 처리하는 기법

 

높은 성능을 가져오나, 성능 향상에 실패하는 경우도 있다. 

1. 데이터 위험

명령어 간 데이터 의존성에 의해 발생

2. 제어 위험

프로그램 카운터의 갑작스러운 변화에 의해 발생

3. 구조적 위험(=지원 위험)

명령어들을 겹쳐 실행하는 과정에서 서로 다른 명령어가 동시에 ALU, CPU 부품을 사용하려고 할 때 발생

 

2. 슈퍼스칼라

- CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조

- 공장 생산 라인을 여러 개 두는 것

- 매 클럭 주기마다 동시에 여러 명령어를 인출할 수도, 실행할 수도 있어야 한다.

 

3. 비순차적 명령어 처리(=OoOE)

- 명령어들을 순차적으로 실행하지 않는 기법

- 순서를 바꿔 실행해도 무방한 명령어를 먼저 실행하여 명령어 파이프라인이 멈추는 것을 방지하는 기법

 

명령어 집합 구조 (=ISA)

CPU가 이해할 수 있는 명령어들의 모음, 일종의 CPU의 언어

ISA가 다르다면 CPU가 이해할 수 있는 명령어가 다르다는 뜻이고, 명령어가 달라지면 어셈블리어도 달라진다.

 

CISC (=Computer Instruction Set Computer)

- 복잡한 명령어 집합을 활용하는 컴퓨터(CPU)

- x-86, x86-64는 대표적은 CISC 기반 ISA

- 명령어의 형태와 크기가 다양한 가변 길이 명령어를 활용

- 상대적으로 적은 수의 명령어로 프로그램의 실행할 수 있어, 메모리를 최대한 아끼면 개발할 수 있음 ( 메모리 공간 절약 )

- 활용하는 명령어가 워낙 복잡하고 다양해 명령어의 크기와 실행되기까지의 시간이 일정하지 않다.

- 명령어가 복잡해 명령어 하나를 실행하는 데에 여러 클럭 주기를 필요로 한다.

- 다양하고 복잡한 기능을 제공하나, 자주 사용하는 명령어만 쓴다. 

 

한 줄 요약 : 적은 수의 명령으로 프로그램을 동작시키고 메모리를 절약시킬 수 있지만, 명령어의 규격화가 어려워 파이프라이닝이 어렵다.

 

RISC (=Reduced Instruction Set Computer)

- 종류가 적고, 짧고 규격화된 명령어(되도록 1 클럭 내외)를 지향

- 고정 길이 명령어를 활용

- 메모리에 직접 접근하는 명령어를 두 개로 제한(load,store)할 만큼 메모리 접근을 단순화하고 최소화한다.

- 레지스터를 적극 활용해 레지스터를 활용한 연산이 많고, 범용 레지스터 개수도 더 많다.

 

한 줄 요약 : 적은 수의 명령으로 프로그램을 동작시키고 메모리를 절약시킬 수 있지만, 명령어의 규격화가 어려워 파이프라이닝이 어렵다.