명령어 병렬 처리 기법 요약
1. 명령어 파이프라인 (Instruction Pipeline)

(1) 개념
-
CPU가 시간을 효율적으로 사용하여 명령어를 빠르게 처리하는 방법.
-
하나의 명령어를 실행할 때 4가지 단계로 나누어 진행:
- 인출 (Fetch): 메모리에서 명령어를 가져옴.
- 해석 (Decode): 명령어를 분석하여 실행할 준비.
- 실행 (Execute): 연산을 수행.
- 저장 (Write-back): 연산 결과를 저장.
-
동시에 실행 가능: 각 단계가 서로 겹치지만 않으면, 여러 개의 명령어를 동시에 실행할 수 있음.
(2) 효과
- CPU의 성능을 향상시킴.
- 예를 들어, 한 명령어를 실행하는 동안 다음 명령어를 해석하고, 또 다음 명령어를 인출하는 방식으로 CPU의 자원을 낭비하지 않음.
(3) 한계: 파이프라인 위험 (Pipeline Hazard)
- 명령어 파이프라인이 항상 성능을 향상시키는 것은 아님.
- 파이프라인 위험(Pipeline Hazard)이 발생할 수 있음.

1) 데이터 위험 (Data Hazard)
- 이전 명령어의 실행 결과가 필요한데, 아직 실행이 완료되지 않은 경우.

- 예:
ADD R1, R2, R3 ; R1 = R2 + R3
SUB R4, R1, R5 ; R4 = R1 - R5 (R1의 값이 아직 없음)
- 해결법: 데이터 포워딩(Data Forwarding) 또는 명령어 지연(Instruction Stall)

2) 제어 위험 (Control Hazard)
- 프로그램 실행 중 점프(Branch) 명령어가 발생하여 실행 흐름이 변경되는 경우.

3) 구조적 위험 (Structural Hazard)
- 두 개 이상의 명령어가 같은 CPU 자원(ALU, 메모리 등)을 동시에 사용하려고 할 때 발생.

2. 슈퍼스칼라 (Superscalar)
- 여러 개의 파이프라인을 두는 기법.
- 여러 개의 명령어를 동시에 병렬로 처리할 수 있음.

- 예:
- 1개 파이프라인: 1개 명령어 처리
- 2개 파이프라인: 2개 명령어 동시 실행
- 4개 파이프라인: 4개 명령어 동시 실행
(1) 효과
- 성능 향상: 한 사이클에 여러 개의 명령어를 실행할 수 있음.
- 멀티스레드 CPU와 연계 가능: 예를 들어, 8코어 16스레드 CPU는 여러 개의 파이프라인을 가질 수 있음.
(2) 한계
- 파이프라인 개수가 많아질수록 파이프라인 위험도 증가.
- 실질적인 성능 향상은 파이프라인 개수에 비례하지 않음.
3. 비순차적 명령어 처리 (Out-of-Order Execution, OoOE)
- CPU가 명령어를 순차적으로 실행하지 않고, 실행할 수 있는 명령어를 먼저 처리하는 방식.

(1) 개념
- 기본적으로 CPU는 메모리에 저장된 명령어를 순서대로 실행함.
- 하지만 의존성이 없는 명령어는 순서를 바꿔서 먼저 실행할 수 있음.
- 예:
MOV [100], 1
MOV [101], 2
ADD [102], [100], [101] ; 100번지, 101번지 값이 필요
- 3번째 명령어는 앞의 연산이 끝나야 실행 가능.
- 순서를 조정하면 실행 속도가 향상됨.
(2) 효과
- CPU의 유휴 시간을 줄이고, 명령어 실행을 최적화할 수 있음.
- 파이프라인 중단을 방지하여 성능을 향상.
(3) 한계
- 명령어 간의 의존성을 고려해야 함.
- 일부 명령어는 순서를 바꿀 수 없음:
ADD R1, R2, R3 ; R1 = R2 + R3
SUB R4, R1, R5 ; R4 = R1 - R5 (R1이 필요함)
4. 전체 요약
| 기법 | 개념 | 장점 | 한계 |
|---|
| 명령어 파이프라인 | 여러 명령어를 겹쳐서 실행 | 성능 향상 | 파이프라인 위험 발생 가능 |
| 슈퍼스칼라 | 여러 개의 파이프라인 사용 | 한 사이클에 여러 명령어 실행 가능 | 관리 복잡, 파이프라인 위험 증가 |
| 비순차적 명령어 처리 | 실행 가능한 명령어를 먼저 처리 | CPU 유휴 시간 최소화 | 명령어 의존성 고려 필요 |
5. 결론
- CPU의 성능을 향상시키기 위해 병렬 처리 기법이 필수적.
- 명령어 파이프라인을 기본으로 하며, 더 나아가 슈퍼스칼라, 비순차적 명령어 처리 등의 기술을 활용.
- 그러나 각 기법에는 단점과 한계가 있으며, 이를 극복하기 위한 기술이 지속적으로 발전하고 있음.
최종 정리
- CPU 성능 최적화를 위해 다양한 병렬 처리 기법을 사용함.
- 명령어 파이프라인 → 슈퍼스칼라 → 비순차적 명령어 처리 순으로 발전.
- 현실적으로는 다양한 기술을 조합하여 성능을 높임.
이 강의 내용을 이해하면 현대 CPU의 구조와 성능 최적화 방식을 확실히 파악할 수 있습니다! 😊