# 빠른 CPU를 위한 설계 기법
## 클럭
CPU는 클럭 속도에 비례한다. 고사양이 필요할때 최대 속도를 내고 저사양일때는 속도를 낮춘다. 또한 발열 문제를 일으킬 가능성이 있다.
## 코어와 멀티코어
- 코어
명령어를 실행하는 부품
- 멀티코어
CPU의 연산 속도는 코어 수에 비례하여 증가 하지는 않는다. 중요한 것은 코어마다 처리할 명령어들을 얼마나 적절하게 분배하느냐이고 그에 따라서 연산 속도는 크게 달라진다.
## 스레드와 멀티스레드
- 하드웨어적 스레드
스레드를 하드웨어적으로 정의하면 '하나의 코어가 동시에 처리하는 명령어 단위'를 의미한다. 예를 들어 2코어 4스레드 CPU는 아래 그림처럼 명령어를 실행하는 부품을 두 개 포함하고, 한 번에 네 개의 명령어를 처리할 수 있는 CPU를 의미한다.
- 소프트웨어적 스레드
소프트웨어적 스레드는 '하나의 프로그램에서 독립적으로 실행되는 단위'를 의미한다.
# 명령어 병렬 처리 기법
## 명령어 파이프라인

같은 단계가 겹치지 않는다면 CPU는 각 단계를 동시에 실행할 수 있다. 예를 들어 CPU는 한 명령어를 '인출'하는 동안에 다른 명령어를 '실행'할 수 있고, 한 명령어가 '실행'되는 동안에 연산 결과를 '저장'할 수 있다

위처럼 마치 공장 생산 라인과 같이 명령어들을 명령어 파이프라인에 넣고 동시에 처리 하는 기법을 명령어 파이프라이닝 이라고 한다.
파이프라이닝이 높은 성능을 가져오기는 하지만, 특정 상황에서는 성능 향상에 실패하는 경우도 있다. 이를 파이프라인 위험 이라고 부른다.
- 데이터 위험
의존적인 두 명령어를 무작정 동시에 실행하려고 하면 파이프라인이 제대로 작동하지 않는 것을 '데이터 위험'이라고 한다.
- 제어 위험
주로 분기 등으로 인한 '프로그램 카운터의 갑작스러운 변화'에 의해 발생합니다. 이를 위해 살용하는 기술 중 하나가 분기 예측이다.

- 구조적 위험
서로 다른 명령어가 동시에 ALU,레지스터 등과 같은 CPU 부품을 사용하려고 할 때 발생합니다.
## 슈퍼스칼라
CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조를 슈퍼 스칼라라고 한다. 슈퍼스칼라 방식을 차용한 CPU는 파이프라인 위험을 방지하기 위해 고도로 설계되어야 한다. 여러 개의 파이프라인을 이용하면 하나의 파이프라인을 사용할 때 보다 데이터 위험, 제어 위험, 자원 위험을 피하기가 더욱 까다롭기 때문이다.
## 비순차적 명령어 처리
명령어들을 순차적으로 실행하지 않는 기법이다. 순차적으로만 실행하지 않고 순서를 바꿔 실행해도 무방한 명령어를 먼저 실행하여 명령어 파이프라인이 멈추는 것을 방지하는 기법을 비순차적 명령어 처리 기법이라고 한다.
# CISC와 RISC
## 명령어 집합
CPU의 명령어는 제조사 마다 다르다.이때 CPU가 이해할 수 있는 명령어들의 모음을 명령어 집합 또는 명령어 집합 구조라고 한다(ISA).
ISA가 달라지면 그에 따른 나비 효과로 많은 것이 달라진다. 제어장치가 명령어를 해석하는 방식, 사용되는 레지스터의 종류와 개수, 메모리 관리 방법 등 많은 것이 달라진다.
## CISC
CISA는 다양하고 강력한 기능의 명령어 집합을 활용하기 때문에 명령어의 형태와 크기가 다양한 가변 길이 명령어를 활용한다.
- 장점
- 적은수의 명령어만으로도 프로그램을 동작시킬 수 있다
- 메모리 공간을 절약할 수 있다
- 단점
- 복잡하고 다양한 기능을 제공 하는 탓에 멸영어의 키기와 실행되기까지의 시간이 일정하지 않다.
- 명령어 하나를 실행하는 데 여러 클럭 주기가 필요
- CPU의 성능을 떨어트림
## RISC

CISC에 비해 명령어의 종류가 적다. 그리고 CISC와는 달리 짧고 규격화된 명령어이고 되도록이면 1클럭 내외로 실행되는 명령어를 지향한다. 고정 길이 명령어 활용한다.
