
참고 서적: 혼자 공부하는 컴퓨터 구조 + 운영체제 (강민철, 한빛미디어)
I. 고속의 CPU 설계 기법
1. 클럭
1) 클럭 신호
- 컴퓨터의 부품은
클럭 신호에 맞춰 움직이기 때문에 클럭 신호의 주기를 줄이는 방법을 고려해 볼 수 있다.
2) 클럭 속도
클럭 속도: 1초 당 클럭 신호가 반복되는 횟수 [단위: Hz]
- 일반적으로
클럭 속도를 높일수록 CPU의 속도가 향상된다.
- 하지만 필요 이상으로
클럭 속도를 높이면 발열 문제가 심각해진다.
- 이에 따라 클럭 속도를 높이는 방법 대신에
코어 수를 늘리는 방법과 스레드 수를 늘리는 방법을 고려해 볼 수 있다.
2. 코어와 멀티 코어
1) 코어
- 전통적인 CPU에는
명령어를 실행하는 부품이 한 개만 존재하였다.
- 현대적인 CPU에는
명령어를 실행하는 부품이 여러 개 존재한다.
명령어를 실행하는 부품을 코어라고 한다.
2) 멀티 코어
- 여러 개의 코어를 가지고 있는 CPU, 또는 프로세서를 칭한다.
- 다만, CPU의 연산 속도가 코어의 수에 비례하여 증가하지는 않는다.
3. 스레드와 멀티 스레드
1) 스레드
2) 하드웨어적 스레드
- 한 개의 코어가 동시에 처리하는 명령어 단위이다.
3) 소프트웨어적 스레드
- 한 개의 프로세스에서 독립적으로 실행되는 단위이다.
4) 멀티 스레드
- 한 개의 코어로 여러 명령어를 동시에 처리하는 CPU이다.
- 예: CPU 내부에 2개의 코어가 있고, 각 코어마다 4개의 명령어를 동시에 실행할 수 있는 경우를
2코어 8스레드 CPU라고 한다.
II. 명령어 병렬 처리 기법
1. 명령어 파이프라인
- 명령어 처리 단계는
명령어 인출, 명령어 해석, 명령어 실행, 결과 저장 순으로 분류할 수 있다.
- 아래의 [테이블 1]처럼 명령어 파이프라인이 존재할 경우 각 시점마다 동일한 단계만 겹치지 않는다면 CPU는 각각의 단계를 동시에 실행할 수 있다.
- 아래의 [테이블 1]에서 t8초 동안 5개의 명령어를 실행할 수 있다.
[테이블 1]
| t1 | t2 | t3 | t4 | t5 | t6 | t7 | t8 |
|---|
| 명령어 1 | 인출 | 해석 | 실행 | 저장 | | | | |
| 명령어 2 | | 인출 | 해석 | 실행 | 저장 | | | |
| 명령어 3 | | | 인출 | 해석 | 실행 | 저장 | | |
| 명령어 4 | | | | 인출 | 해석 | 실행 | 저장 | |
| 명령어 5 | | | | | 인출 | 해석 | 실행 | 저장 |
- 만약 명령어 파이프라인이 없다면 아래의 [테이블 2]처럼 t8초 동안 단 2개의 명령어만 실행할 수 있다.
[테이블 2]
| t1 | t2 | t3 | t4 | t5 | t6 | t7 | t8 |
|---|
| 명령어 1 | 인출 | 해석 | 실행 | 저장 | | | | |
| 명령어 2 | | | | | 인출 | 해석 | 실행 | 저장 |
1) 명령어 인출 (Instruction Fetch)
- Memory에서 CPU로 명령어를 가져오는 단계이다.
2) 명령어 해석 (Instruction Decode)
- CPU에서 명령어 해독기를 이용하여 명령어를 분석하고 어떤 작업을 수행해야 하는지 결정하는 단계이다.
3) 명령어 실행 (Execute Instruction)
4) 결과 저장 (Write Back)
- 명령어 실행 후 결과를 저장해야 하는 경우 이를 Memory에 저장한다.
2. 수퍼 스칼라
- CPU 내부에 여러 개의 명령어 파이프라인을 포함한 구조이다.
[테이블 3]
| t1 | t2 | t3 | t4 | t5 | t6 | t7 | t8 |
|---|
| 명령어 1 | 인출 | 해석 | 실행 | 저장 | | | | |
| 명령어 2 | 인출 | 해석 | 실행 | 저장 | | | | |
| 명령어 3 | | 인출 | 해석 | 실행 | 저장 | | | |
| 명령어 4 | | 인출 | 해석 | 실행 | 저장 | | | |
| 명령어 5 | | | 인출 | 해석 | 실행 | 저장 | | |
| 명령어 6 | | | 인출 | 해석 | 실행 | 저장 | | |
| 명령어 7 | | | | 인출 | 해석 | 실행 | 저장 | |
- 이론적으로는 명령어 파이프라인의 개수에 비례하여 명령어 처리 속도가 증가하지만,
명령어 파이프라인 위험도의 증가로 인해 명령어 파이프라인의 개수와 명령어 처리 속도가 비례하진 않는다.
3. 파이프라인 위험
- 명령어 파이프라인이 성능 향상에 실패하는 경우
1) 데이터 위험
- 명령어 간의 의존성에 의해 생기는 위험이다.
- 이전 명령어를 끝까지 실행해야만 그 다음 명령어가 비로소 실행될 수 있는 경우이다.
- 모든 명령어를 동시에 처리할 수 없는 상황이다.
2) 제어 위험
- PC (Program Counter)의 갑작스러운 변화에 의해 생기는 위험이다.
- 명령어는 기본적으로 메모리에 순차적으로 적재되는데, JUMP 등의 명령어로 인하여 다른 주소로 이동해야 하는 경우 발생한다.
3) 구조적 위험
- 서로 다른 명령어가 같은 CPU 부품 (ALU, Register)을 사용하려고 할 때 생기는 위험이다.
III. 명령어 집합 구조, CISC, RISC
1. 명령어 집합 (IS, Instruction Set)
- CPU마다 명령어의 생김새, 연산, 주소 지정 방식 등의 차이가 있다.
- IS의 대표적인 예로는 CISC와 RISC가 있다.
1) 명령어 집합
- CPU가 이해할 수 있는 명령어들의 모임이다.
2) 명령어 집합 구조 (ISA, Instruction Set Architecture)
- CPU의 언어이자 HW가 SW를 어떻게 이해할지에 대한 약속이다.
2. CISC (Complex Instruction Set Computer)
1) 정의
- 복잡한 명령어 집합을 사용하는 컴퓨터 (CPU)이다.
2) 특징
- 명령어의 형태와 크기가 다양한
가변 길이 명령어 집합을 사용한다.
- 상대적으로 적은 수의 명령어로도 복잡한 프로그램을 실행할 수 있다.
- x86, x86-64는 CISC 기반 ISA이다.
3) 단점
- 명령어의 크기와 실행되기까지의 시간이 일정하지 않다.
- 복잡한 명령어 때문에 하나의 명령어를 실행하는 데 여러 클럭 주기가 필요하다.
- 이에 따라
명령어 파이프라이닝에 불리하다는 치명적인 단점이 존재했다.
- 또한 일부의 명령어만 자주 사용되면서 대다수의 복잡한 명령어의 사용 빈도가 현저히 낮아졌다.
3. RISC (Reduced Instruction Set Computer)
1) 정의
- 명령어의 종류가 적고, 짧고 규격화된 명령어를 사용하는 컴퓨터이다.
2) 특징
- 명령어의 크기가 고정된
고정 길이 명령어 집합을 사용한다.
- 메모리에 접근하는 명령어를
load와 store로 제한하여 Memory 접근을 최소화하면서도, Register 사용 빈도를 높여 GPR (범용 레지스터) 종류가 다양하다.
3) 장점
- 짧고 규격화된 명령어를 사용하기 때문에
명령어 파이프라이닝에 유리하다.
4) 단점
- 명령어의 종류가 CISC보다 적기 때문에 동일한 프로그램을 동작시키기 위해서는 CISC보다 더 많은 명령어가 필요하다.