1. 빠른 CPU를 위한 설계 기법
1) 클럭
- 클럭의 동작
- 컴퓨터 부품들은 클럭 신호에 맞춰 동작
- CPU는 명령어 사이클에 맞춰 명령어를 실행
- 따라서 클럭 속도가 높은 CPU는 일반석으로 성능이 좋음
- 클럭 속도
- 1초에 클럭이 몇 번 반복되는지를 나태나는 시간 단위(Hz)
- 클럭 속도는 매번 일정하게 유지되지 않음
- 계속 일정한 클럭 속도를 유지하기 보다는 고성능을 요하는 순간에는 클럭 속도를 높이고,
그렇지 않을 때는 유연하게 클럭 속도를 낮춤 - 최대 클럭 속도를 강제로 더 끌어올리는 기법을 오버클럭킹(overclocking)
- 계속 일정한 클럭 속도를 유지하기 보다는 고성능을 요하는 순간에는 클럭 속도를 높이고,
- 클럭 속도를 높이면 발열문제가 존재
- 클럭 속도만으로 CPU의 성능을 올리기에는 한계
2) 코어와 멀티코어
- 코어(core)
- CPU 내에서 명령어를 실행하는 부품
- 멀티코어(multi-core)
- CPU가 코어를 여러 개 포함하고 있는 경우
- 코어마다 처리할 명령어들을 얼마나 적절하게 분배하느냐에 따라 연산 속도가 달라짐
- 따라서 코어의 개수가 많다고 연산 속도가 좋은 것은 아님
3) 스레드와 멀티스레드
- 스레드(thread)
- 하드웨어적 스레드
- 하나의 코어가 동시에 처리하는 명령어 단위
- 여러 스레드를 지원하는 CPU(멀티스레드 프로세서: multithread)는 하나의 코어로도 여러 개의 명령어를 동시에 실행 가능
- 논리 프로세서(logical processor)라고 부르기도 함
- 멀티스레드 프로세서
- 여러 개의 하드웨어적 스레드를 지원하는 CPU
- 소프트웨어적 스레드
- 하나의 프로그램에서 독립적으로 실행되는 단위
- Ex) 어떤 프로그램에서 동시에 기능들이 수행되길 원할 때,
각 기능을 각각의 스레드로 만들면 동시에 실행 가능
- 정리
- 하드웨어적 스레드
코어 | 명령어를 실행할 수 있는 하드웨어 부품 |
스레드 | 명령어를 실행하는 단위 |
멀티코어 프로세서 | 코어가 두 개 이상 들어있는 CPU |
멀티스레드 프로세서 | 하나의 코어로 여러 개의 명령어를 동시에 실행할 수 있는 CPU |
2. 명령어 병렬 처리 기법(ILP: Instruction-Level Parallelism)
1) 명령어 파이프라이닝(instruction pipelining)
- 공장 생산 라인과 같이 명령어들을 명령어 파이프라인에 넣고 동시에 처리하는 기법
- 같은 단계가 겹치지만 않는다면 CPU는 '각 단계를 동시에 실행할 수 있다'
- 더 효율적인 명령어 처리 가능
- 파이프라인 위험(pipeline hazard)
- 특정 상황에서는 성능 향상에 실패하는 경우 발생 가능
- 데이터 위험(data hazard)
- 명령어 간 데이터 의존성에 의해 발생
- 이전 명령어를 처리해야만 실행되는 경우가 존재
- 데이터 의존적인 두 명령어를 동시에 실행 시, 파이프라인이 제대로 동작하지 않음
- 명령어 간 데이터 의존성에 의해 발생
- 제어 위험(control hazard)
- 분기 등으로 인한 프로그램 카운터의 갑작스러운 변화에 의해 발생
- 프로그램 카운터는 현재 실행 중인 명령어의 다음 주소로 갱신됨
- 그러나 실행 흐름이 바뀌어 분기가 발생해 명령어의 순서가 바뀌게 되면
파이프라인에 미리 가져와둔 명령어들이 쓸모 없어짐
- 분기 등으로 인한 프로그램 카운터의 갑작스러운 변화에 의해 발생
- 구조적 위험 (structural hazard)
- 명령어들을 겹쳐 실행하는 과정에서 서로 다른 명령어가 동시에 CPU 자원을 사용하려할 때 발생
- 자원 위험(resource hazard)이라고도 부름
2) 슈퍼스칼라(superscalar)
- CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조
- 공장 생산 라인을 여러개 두는 것과 같음
- 이론적으로 파이프라인 개수에 비례하여 프로그램 처리 속도가 증가해야하나,
파이프라인 위험 등의 예상치 못한 문제때문에 비례하지 속도가 증가하지 않는다. - 또한 여러 개의 파이프라인을 사용하기 때문에 파이프라인 위험을 방지하기 더 까다롭다.
3) 비순차적 명령어 처리(OoOE: Out-of-order-execution)
- 파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 명령어 병렬 처리 기법
- 선순위 명령어가 실행되는 명령어들과 데이터 의존성이 있을 때, 순서를 바꿔 처리해도 되는 후순위 명령어들을 먼저 처리하는 방법
- 대기 시간 감소
- CPU 성능 향상에 크게 기여한 기법
3. CISC와 RISC
1) ISA(Instruction Set Architecture)
- CPU의 언어이자 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속
- CPU가 이해할 수 있는 명령어들의 모음
- CPU 제조사마다 ISA가 다름
- ISA가 다르면 서로의 명령어를 이해하지 못함
2) CISC(Complex Instruction Set Computer)
- 복잡한 명령어 집합을 활용하는 컴퓨터
- x86, x86-64
- 명령어 형태와 크기가 다양한 가변 길이 명령어를 활용
- 상대적으로 적은 수의 명령어로도 프로그램을 실행할 수 있음
- 메모리 공간 절약
- 명령어의 크기와 실행되기까지의 시간이 일정하지 않음
- 복잡한 명령어 때문에 명령어 하나를 실행하는 데에 여러 클럭 주기가 필요할 수 있음
▶CISC는 명령어마다 처리 시간이 달라지기 때문에 명령어 파이프라인을 구현하기 어렵다.
→ 파이프라인 규격화의 어려움
▶복잡한 연산을 기능을 제공하는 다양한 명령어들이 존재하지만, 자주 사용되는 명령어만 쓰인다.
3) RISC(Reduced Instruction Set Computer)
- CISC의 한계를 극복하기 위해 등장
- 빠른 처리를 위해 명령어 파이프라인을 활용해야 한다.
- 원활한 파이프라이닝을 위해 명령어 길이와 수행시간이 짧고 규격화 되어 있어야한다.
- 자주 쓰이는 명령어만 사용된다.
- 자주 쓰이는 기본적인 명령어를 작고 빠르게 만드는 것
- 빠른 처리를 위해 명령어 파이프라인을 활용해야 한다.
- 1클럭 내외로 실행되는 고정 길이 명령어를 활용
- CISC에 비해 명령어의 종류가 적음
'컴퓨터 구조 &운영체제 > 컴퓨터구조 + 운영체제' 카테고리의 다른 글
입출력장치 (0) | 2024.02.13 |
---|---|
메모리와 캐시 메모리 (0) | 2024.02.07 |
CPU의 작동 원리 (0) | 2024.02.05 |
명령어 (0) | 2024.02.02 |
데이터 (1) | 2024.01.22 |