2026-07-23 TIL (103일차)
2026-07-23 TIL (103일차)
CPU 명령어 병렬 처리와 파이프라이닝 요약
1. 명령어 병렬 처리 기법 (ILP, Instruction-Level Parallelism)
명령어 병렬 처리 기법은 여러 개의 명령어를 동시에(병렬적으로) 처리하여 CPU를 쉬지 않고 작동시켜 처리 속도를 비약적으로 상승시키는 현대 CPU의 핵심 기술입니다. 대표적으로 명령어 파이프라이닝(Instruction Pipelining)이 있습니다.
2. 명령어 파이프라이닝 (Instruction Pipelining)
명령어가 처리되는 과정을 비슷한 시간 간격의 ‘단계’로 나누어 겹쳐서 실행하는 기법입니다.
- 명령어 처리 단계 (예시):
- 명령어 인출 (Instruction Fetch)
- 명령어 해석 (Instruction Decode)
- 명령어 실행 (Execute)
- 결과 저장 (Write Back)
- 핵심 원리: 같은 단계가 겹치지만 않는다면 CPU는 각기 다른 명령어를 동시에 실행할 수 있습니다.
- 예시: 명령어 1이 ‘해석’되는 동안, 명령어 2를 ‘인출’하고, 명령어 1이 ‘실행’되는 동안 명령어 2를 ‘해석’함.
- 공장의 생산 라인(파이프라인)처럼 명령어를 밀어 넣어 동시에 겹쳐서 처리하는 기법입니다.
슈퍼스칼라 (Superscalar)
- 파이프라이닝에서 한 단계 더 발전하여 CPU 내부에 여러 개의 명령어 파이프라인을 두는 구조를 의미합니다.
- 오늘날의 CPU는 대부분 여러 개의 파이프라인을 이용하는 ‘슈퍼스칼라 프로세서’입니다.
3. 파이프라인 위험 (Pipeline Hazards)
명령어를 겹쳐서 실행하는 파이프라이닝이 특정 원인에 의해 실패하여 성능 향상이 이루어지지 않는 상황을 말하며, 크게 세 가지로 분류됩니다.
① 데이터 위험 (Data Hazard)
- 원인: 명령어 간의 데이터 의존성 때문에 발생합니다.
- 설명: 어떤 명령어는 이전 명령어의 실행이 완전히 끝난 후 결과값이 저장되어야만 온전히 실행될 수 있습니다.
- 예시: 명령어 1이 R1에 값을 저장하는 명령어이고, 명령어 2가 R1의 값을 가져와 계산하는 명령어라면, 명령어 1의 저장이 끝나기 전에 명령어 2가 R1을 인출하면 데이터 일관성이 깨집니다.
② 제어 위험 (Control Hazard)
- 원인: 프로그램 카운터(PC)의 갑작스러운 변화(점프/분기)에 의해 발생합니다.
- 설명: 파이프라인에 미리 다음 명령어를 인출해두었는데, 이전 명령어에서
Jump(점프)명령이 실행되어 프로그램 흐름이 바뀌면, 미리 인출해둔 명령어들은 쓸모가 없어집니다. - 해결 기술: 오늘날의 CPU는 이를 방지하기 위해 분기 예측(Branch Prediction) 기술을 사용합니다.
③ 구조적 위험 / 자원 위험 (Structural Hazard)
- 원인: 서로 다른 명령어가 동일한 자원(ALU, 레지스터 등)을 동시에 이용하려고 할 때 발생합니다.
This post is licensed under CC BY 4.0 by the author.