빠른 CPU를 만들기 위해서는 높은 클럭 속도, 멀티코어 (Multicore), 멀티스레드 (Multithreading) 외에도 CPU가 효율적으로 작업을 수행하도록 하는 명령어 병렬 처리 기법이 중요하다. 이를 통해 CPU는 대기 시간을 줄이고 효율적인 연산을 할 수 있다.
1. 명령어 파이프라이닝 (Instruction Pipelining)
- CPU의 명령어 처리 과정에서 각 단계를 분리하여 명령어 파이프라인 (Instruction Pipeline) 에 넣어 동시에 처리할 수 있도록 하는 기법
- 일반적인 명령어 처리 과정 :
- 명령어 인출 (Instruction Fetch)
- 명령어 해석 (Instruction Decode)
- 명령어 실행 (Instruction Execute)
- 결과 저장 (Write Back)
t0 | t1 | t2 | t3 | t4 | t5 | t6 | |
명령어 1 | 인출 | 해석 | 실행 | 저장 | |||
명령어 2 | 인출 | 해석 | 실행 | 저장 | |||
명령어 3 | 인출 | 해석 | 실행 | 저장 | |||
명령어 4 | 인출 | 해석 | 실행 | 저장 | |||
명령어 5 | 인출 | 해석 | 실행 | ||||
명령어 6 | 인출 | 해석 | |||||
명령어 7 | 인출 |
파이프라인 위험 (Pipeline Hazard)
1️⃣ 데이터 위험 (Data Hazard)
- 명령어 간 데이터 의존성에 의해 발생
- 예) 명령어 1이 실행되어야만 명령어 2를 실행할 수 있는 경우
명령어 1 : R1 에 R2 + R3 를 저장
명령어 2 : R4 에 R1 + R5 를 저장
2️⃣ 제어 위험 (Control Hazard)
- 프로그램 카운터 (PC) 의 갑작스러운 변화로 발생
- 예) 분기 명령어로 인해 프로그램 흐름이 바뀔 때 이전에 불러온 명령어들이 무용지물 되는 상황
- 이를 해결하기 위한 기술 중 하나가 분기 예측 (Branch Prediction)
3️⃣ 구조적 위험 (Structural Hazard)
- 여러 명령어가 동시에 같은 CPU 자원을 사용하려고 할 때 발생
- 예) ALU나 레지스터와 같은 자원을 동시에 여러 명령어가 요구할 때
- 자원 위험 (Resource Hazard) 라고도 부른다.
2. 슈퍼스칼라 (Superscalar)
- CPU 내부에 여러 개의 파이프라인을 포함하여 한 클럭 주기 내에 여러 명령어를 동시에 처리할 수 있는 구조
- 이를 통해 CPU는 병렬 처리가 가능하고 이론적으로는 파이프라인 수에 비례하여 성능 향상
- 파이프라인 위험 등으로 인해 실제 성능 향상은 적을 수 있다.
- 이 구조로 명령어 처리가 가능한 CPU를 슈퍼스칼라 프로세서 (Superscalar CPU, 슈퍼스칼라 CPU) 라고도 부른다.
- 다양한 명령어를 동시에 인출하고 실행할 수 있는 능력을 갖추고 있어 더욱 효율적인 명령어 처리 가능
- 파이프라인 위험을 방지하려면 고도의 설계 필요
3. 비순차적 명령어 처리 (Out-of-Order Execution, OoOE)
- 명령어를 순차적으로 처리하지 않고 순서를 바꾸어 실행하는 기법
- 한 명령어가 이전 명령어의 결과를 기다리고 있을 때, 다른 명령어를 실행하여 파이프라인의 공백 제거
<예시>
명령어 1 : 메모리[100] = 1
명령어 2 : 메모리[101] = 2
명령어 3 : 메모리[102] = 메모리[100] + 메모리[101]
명령어 4 : 메모리[150] = 1
명령어 5 : 메모리[151] = 2
명령어 6 : 메모리[152] = 3
- 명령어 2가 끝난 후에 명령어 3을 실행할 수 있음 → 명령어 3과 명령어 6의 위치를 바꿔도 문제가 없음 → 순서를 바꿔서 파이프라인 멈추는 것을 방지
- CPU가 명령어 간의 데이터 의존성을 분석하고, 실행할 수 있는 명령어들의 순서를 조정
'CS' 카테고리의 다른 글
[컴퓨터 구조] CISC와 RISC (0) | 2025.01.03 |
---|---|
[컴퓨터 구조] 빠른 CPU를 위한 설계 기법 (클럭, 코어, 멀티코어, 스레드, 멀티스레드) (3) | 2025.01.03 |
[컴퓨터 구조] CPU의 작동 원리 (1) | 2025.01.02 |
[컴퓨터 구조] 명령어의 구조와 오퍼랜드 필드의 주소 지정 방식 (0) | 2024.12.26 |
[컴퓨터 구조] 컴퓨터의 구성 (2) | 2024.12.26 |