IT/컴퓨터구조

🖥️ [컴퓨터구조] 데이터 해저드와 제어 해저드 해결 방법

BlogFlow 2025. 3. 12. 18:00
반응형

[컴퓨터구조 목차 바로가기]

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는 동적 브랜치 예측과 아웃오브오더 실행을 통해 최적화


반응형