📑 본 글은 <혼공컴운>을 읽고 정리한 글입니다.

1. 빠른 CPU를 위한 설계 기법
빠른 CPU를 원하시나요?
1-1. 클럭
- 클럭 속도(Hz) ⇒ CPU 속도 단위
- 클럭 속도는 일정하지 않다.
- 클럭 속도를 무작정 높이면 발열 문제..!😣
1-2. 코어와 멀티코어
코어 : 명령어를 실행하는 부품 (ALU + 레지스터 + 제어장치)
멀티 코어 : 코어를 여러 개 포함하고 있는 CPU
- CPU의 연산 속도가 꼭 코어 수에 비례하여 증가하지는 않는다.
- 코어마다 처리할 연산의 분배가 적절하지 않거나, 작업량보다 코어 수가 지나치게 많거나
- 코어마다 처리할 명령어를 적절하게 분배하느냐
1-3. 스레드와 멀티스레드
스레드 : 실행 흐름의 단위
멀티 스레드 : 코어를 여러 개 포함하고 있는 CPU
- = 하이퍼스레딩 from Intel
- 논리 프로세서 (Logical Processor)
- 4코어 8스레드 : 실제 코어는 4개지만, 메모리 속 프로그램이 보기에는 8개처럼 보인다.
- 멀티 스레드 프로세서
- 하나의 코어로 여러 명령어를 동시에 처리하는 CPU
- 비법 → 레지스터 세트를 여러 개 둔다.
- PC, Stack Pointer, Memory buffer Register, Memory Address Register
- 하나의 명령어를 처리하기 위해 꼭 필요한 레지스터
2. 명령어 병렬 처리 기법
CPU를 한시도 쉬지 않고 작동시키는 게 중요하다. 불쌍한 CPU..
2-1. 명령어 파이프라인
명령어 처리 과정 by 클럭 단위
- 명령어 인출(Fetch)
- 명령어 해석(Decode)
- 명령어 실행(Execute)
- 결과 저장(Write)
→ CPU는 각 단계를 동시에 실행할 수 있다.
명령어 파이프라이닝 : 동시에 여러 개의 명령어를 겹쳐 실행하는 기법 → 단일 파이프라인으로 구현
- 장점 : 높은 성능
- 단점 : 파이프라인 위험(Pipeline Hazard) - 성능 향상에 실패하는 상황
- 데이터 위험
- 제어 위험
- 분기 등으로 인한 PC의 갑작스러운 변화
- 극뽁 : 분기 예측 기술
- 구조적 위험
- 서로 다른 명령어가 동시에 같은 CPU 부품을 사용하려고 할 때
- = 자원 위험
2-2. 슈퍼스칼라
수퍼스칼라 : CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조
- 매 클럭 주기마다 동시에 여러 명령어를 인출, 실행할 수 있어야 한다.
- like 멀티스레드 프로세서
2-3. 비순차적 명령어 처리(OoOE)
Out-of-order-execution
비순차적 명령어 처리 : 명령어의 합법적인 새치기
- 문제 상황 : 데이터 의존성으로 명령어 파이프라인이 멈추는 경우가 생김
- 명령어를 순차적으로만 실행하지 않고 순서를 바꿔 실행해도 무방한 명령어를 먼저 실행한다.
3. CISC와 RISC
CPU가 파이프라이닝, 수퍼스칼라를 효과적으로 사용하려면 명령어가 파이프라이닝하기 쉬워야 한다.
3-1. 명령어 집합
- 명령어 집합(IS) / 명령어 집합 구조(ISA-Instruction Set Architecture)
- CPU가 이해할 수 있는 명령어들의 모음 = CPU의 언어
- CPU를 비롯한 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속
- ISA가 다르면
- CPU가 이해하는 명령어나 어셈블리어가 달라진다. 같은 소스 코드여도
- CPU 하드웨어 설계도 달라진다.
3-2. CISC
CISC : Complex Instruction Set Computer
- 다양하고 강력한 기능의 명령어 집합 활용
- 가변 길이 명령어
- 메모리에 접근하는 주소 지정 방식도 다양하다.
- 장점
- 단점
- 명령어의 크기와 실행 시간이 일정하지 않다.
- 명령어 하나 실행하는 데에 여러 클럭 주기 필요함 ; 넘 길어서
⇒ 규격화되지 않은 명령어가 파이프라이닝을 어렵게 만든다.
3-3. RISC
RISC : Reduced Instruction Set Computer
- 단순하고 적은 수의 고정 길이 명령어 집합 활용
- 고정 길이 명령어
- 메모리 접근 단순화&최소화 → 주소 지정 방식 종류 적다.
- 메모리 대신 레지스터를 적극 활용
- 장점
- 단점
- 명령어 수가 많음 → 실행 파일 길이가 길다.
📢 ISA For 파이프라이닝
- 명령어의 길이와 수행 시간이 짧고 규격화
- 자주 쓰이는 기본적인 명령어를 작고 빠르게 만드는 것