4️⃣ 프로세서 구조와 동작 원리
파이프라이닝(Pipelining)은 CPU의 성능을 향상시키는 중요한 기법이지만,
명령어들이 겹쳐서 실행되면서 데이터 해저드(Data Hazard)와 제어 해저드(Control Hazard) 같은 문제가 발생할 수 있습니다.
이러한 문제를 해결하지 않으면 CPU가 잘못된 데이터를 사용하거나, 불필요한 대기를 발생시켜 성능 저하가 일어날 수 있습니다.
이번 섹션에서는 데이터 해저드와 제어 해저드가 발생하는 원인과 이를 해결하는 다양한 기법을 자세히 살펴보겠습니다.
🔹 1. 데이터 해저드(Data Hazard)란?
✅ 1.1 데이터 해저드 개념
데이터 해저드(Data Hazard) 는 파이프라인에서 앞선 명령어의 결과가 아직 완료되지 않았는데, 뒤따르는 명령어가 해당 데이터를 필요로 하는 경우 발생합니다.
💡 예제: 데이터 해저드 발생 (MIPS 어셈블리)
ADD R1, R2, R3 # R1 = R2 + R3 (EX 단계에서 결과 생성)
SUB R4, R1, R5 # R4 = R1 - R5 (R1의 값이 아직 준비되지 않음)
✅ SUB 명령어가 실행될 때, ADD 명령어의 결과(R1)가 아직 준비되지 않아 문제가 발생
✅ 1.2 데이터 해저드 해결 방법
데이터 해저드를 해결하는 대표적인 방법으로 전방전달(Forwarding), NOP 삽입, 레지스터 리네이밍 등이 있습니다.
해결 방법 | 설명 |
전방전달(Forwarding, Bypassing) | 연산 결과를 바로 다음 명령어에 전달하여 해저드를 해결 |
NOP 삽입(Bubble Insertion) | 문제가 해결될 때까지 명령어 실행을 지연 |
레지스터 리네이밍(Register Renaming) | 동일한 레지스터를 다른 이름으로 바꿔 충돌을 방지 |
✅ 1.3 전방전달(Forwarding, Bypassing)
전방전달은 연산 결과가 아직 메모리에 저장되지 않았더라도, ALU에서 바로 다음 명령어에 값을 전달하는 방식입니다.
💡 예제: 전방전달 적용 전 (해저드 발생)
시간 | 명령어
---- | ------------------------------
1 | ADD R1, R2, R3 (EX 단계)
2 | SUB R4, R1, R5 (EX 단계) → 해저드 발생 (R1이 준비되지 않음)
💡 예제: 전방전달 적용 후 (해저드 해결)
시간 | 명령어
---- | ------------------------------
1 | ADD R1, R2, R3 (EX 단계)
2 | SUB R4, R1, R5 (EX 단계) → ALU가 바로 R1 값을 전달 (해결)
✅ 전방전달을 사용하면 데이터 해저드를 해결하여 성능 저하를 방지할 수 있음
✅ 1.4 NOP 삽입 (Bubble Insertion)
NOP(No Operation) 명령어를 추가하여 데이터가 준비될 때까지 CPU가 대기하도록 만드는 방식입니다.
하지만, 성능 저하가 발생할 수 있습니다.
💡 예제: NOP 삽입 (해저드 해결)
ADD R1, R2, R3 # R1 = R2 + R3
NOP # 대기 (데이터가 준비될 때까지)
SUB R4, R1, R5 # R4 = R1 - R5
✅ NOP을 삽입하면 데이터가 준비될 때까지 기다릴 수 있지만, 성능 저하가 발생
✅ 1.5 레지스터 리네이밍(Register Renaming)
같은 레지스터를 여러 명령어에서 사용할 경우, 충돌을 방지하기 위해 별도의 임시 레지스터를 할당하는 기법입니다.
💡 예제: 레지스터 리네이밍 적용
ADD R10, R2, R3 # 중간 결과를 R10에 저장
SUB R4, R10, R5 # 다른 레지스터를 사용하여 해저드 방지
✅ 레지스터 리네이밍을 사용하면 불필요한 데이터 충돌을 피할 수 있음
🔹 2. 제어 해저드(Control Hazard)란?
✅ 2.1 제어 해저드 개념
제어 해저드(Control Hazard) 는 분기(Branch) 명령어가 실행될 때,
다음 명령어가 어떤 경로로 실행될지 확정되지 않아 CPU가 불필요하게 대기해야 하는 문제입니다.
💡 예제: 제어 해저드 발생 (MIPS 어셈블리)
BEQ R1, R2, LABEL # R1과 R2가 같으면 LABEL로 점프
ADD R3, R4, R5 # 점프할지 아직 결정되지 않음
✅ 분기 명령어(BEQ)의 실행 결과가 확정될 때까지 ADD 명령어를 실행할 수 없음
✅ 2.2 제어 해저드 해결 방법
제어 해저드를 해결하는 대표적인 방법으로 브랜치 예측(Branch Prediction), 지연 슬롯(Delay Slot) 등이 있습니다.
해결 방법 | 설명 |
브랜치 예측(Branch Prediction) | 분기 결과를 미리 예측하여 실행 속도를 향상 |
지연 슬롯(Delay Slot Scheduling) | 분기 명령어 이후에 실행할 명령어를 미리 지정 |
✅ 2.3 브랜치 예측(Branch Prediction)
브랜치 예측은 CPU가 분기 명령어가 실행되기 전에 다음 명령어를 미리 예측하여 실행하는 기법입니다.
현대 CPU는 동적 분기 예측(Dynamic Branch Prediction) 기법을 사용하여 정확도를 높입니다.
💡 예제: 브랜치 예측 적용 전 (해저드 발생)
시간 | 명령어
---- | ------------------------------
1 | BEQ R1, R2, LABEL
2 | 대기 (분기 결과가 확정될 때까지)
💡 예제: 브랜치 예측 적용 후 (해저드 해결)
시간 | 명령어
---- | ------------------------------
1 | BEQ R1, R2, LABEL (예측 실행)
2 | ADD R3, R4, R5 (예측이 맞으면 실행 속도 향상)
✅ 브랜치 예측을 사용하면 성능 저하 없이 제어 해저드를 해결 가능
✅ 2.4 지연 슬롯(Delay Slot) 기법
지연 슬롯은 분기 명령어 이후에 반드시 실행할 명령어를 미리 지정하는 방식입니다.
이 방식은 MIPS 아키텍처에서 사용됩니다.
💡 예제: 지연 슬롯 적용
BEQ R1, R2, LABEL # 분기 명령어
NOP # 지연 슬롯 (분기 확정 전 실행할 명령어)
LABEL:
✅ 지연 슬롯을 사용하면 브랜치 명령어가 실행되는 동안 CPU가 대기하지 않음
🔹 3. 현대 CPU에서의 최적화
현대 CPU는 데이터 해저드와 제어 해저드를 해결하기 위해 다음과 같은 최적화 기술을 적용합니다.
✅ 파이프라인 병렬 처리 → 해저드를 최소화하는 명령어 스케줄링
✅ 아웃오브오더 실행(Out-of-Order Execution) → 해저드가 없는 명령어를 먼저 실행
✅ 투명 브랜치 예측(Transparent Branch Prediction) → 머신러닝 기반 예측 기술 적용
✅ 결과:
- 성능 향상 및 CPU 효율 극대화
- 명령어 실행 속도 증가
✅ 마무리: 데이터 해저드 & 제어 해저드 해결 방법 정리
✅ 데이터 해저드는 전방전달(Forwarding), NOP 삽입, 레지스터 리네이밍으로 해결 가능
✅ 제어 해저드는 브랜치 예측(Branch Prediction), 지연 슬롯(Delay Slot)으로 해결 가능
✅ 현대 CPU는 동적 브랜치 예측과 아웃오브오더 실행을 통해 최적화
'IT > 컴퓨터구조' 카테고리의 다른 글
🖥️ [컴퓨터구조] 메모리 계층 구조 개요 (캐시, RAM, HDD/SSD) (0) | 2025.04.02 |
---|---|
🖥️ [컴퓨터구조] 예외(Exception)와 인터럽트 처리 (0) | 2025.03.13 |
🖥️ [컴퓨터구조] 파이프라이닝(Pipelining)의 개념 (0) | 2025.03.11 |
🖥️ [컴퓨터구조] CPU의 명령어 실행 과정 (IF, ID, EX, MEM, WB) (0) | 2025.03.10 |
🖥️ [컴퓨터구조] 데이터패스(Data Path) 개념 (0) | 2025.03.09 |