Book/COMPUTER ORGANIZATION AND DESIGN RISC-V

4. The Processor (4.9 Control Hazards)

S0LL 2024. 11. 17. 14:15

Control hazards 또는 branch hazards는 조건부 분기(instruction)의 실행 시 발생하는 문제이다.

파이프라인에서 조건부 분기의 결과가 결정되기 전에 다른 명령들이 계속 실행되므로, 이러한 분기 명령이 언제 발생할지를 정확히 알 수 없다.

예를 들어, 분기 명령을 포함한 파이프라인에서는 해당 명령이 언제 실행될지를 결정하기까지 지연이 발생하며, 이로 인해 예상된 명령 순서대로 실행되지 않으면 파이프라인의 성능에 영향을 미칠 수 있다.

 

여기서 핵심은 예측이다. 분기 예측(branch prediction)은 파이프라인이 진행될 때 분기가 발생할지 안 할지를 예측하여 성능 저하를 방지하는 방식이다.

예측을 통해 분기가 발생할 경우 필요한 명령을 미리 로드하고, 예측이 틀린 경우에는 명령 삭제(flush) 작업을 통해 문제를 해결할 수 있다.

 

 

그림 4.63은 분기 명령이 파이프라인에서 어떻게 영향을 미치는지를 보여준다. 

beq(조건부 분기) 명령이 실행될 때, 파이프라인에서 후속 명령들이 미리 실행되게 되며, 그 결과 잘못된 명령들이 로드되고 실행될 수 있다. 이 문제를 해결하기 위해 분기 명령이 실행된 후에 정확한 주소로 파이프라인을 조정해야 한다.

 

 

 

1. 분기 예측:

분기 명령이 예측되지 않은 경우: 분기 명령이 파이프라인에서 실행될 때 발생하는 문제를 **stalls(정지)**이라고 하며, 이는 파이프라인의 성능을 저하시킨다.

 

예측 방식: 분기 명령이 실행될 때 예측을 통해 분기가 발생하지 않을 것이다고 예측하고, 연속된 명령들을 계속 실행하는 방식이다.

이 방법은 분기 예측이 틀렸을 때 예측된 명령을 삭제하고 올바른 명령을 실행하도록 한다.

 

2. 분기 예측 최적화:

ID 스테이지에서 분기 결정을 미리 내리면 분기 명령이 발생하기 전의 파이프라인 상태에서 분기가 예상되는 주소로 바로 이동할 수 있다. 이를 통해 분기가 발생한 후 뒤따르는 명령들을 바로 실행할 수 있다.

 

분기가 발생한 경우의 파이프라인:

그림에서는 beq 명령을 예로 들며, 분기 명령이 실행될 때 이후의 명령들을 취소하고, 필요한 명령만 다시 로드하는 과정을 보여준다.

이 과정에서 파이프라인에 “버블” 또는 “nop” 명령을 삽입하여 후속 명령들이 잘못 실행되는 것을 방지한다.

 

버블은 실질적으로 아무 작업도 하지 않는 명령으로, 데이터 또는 제어 흐름의 문제를 해결하기 위해 삽입된다.

 

 

 

 

Dynamic Branch Prediction:

 

동적 분기 예측 분기가 일어나지 않을 것이라고 예측하고, 예측이 틀렸을 경우 그 예측을 취소하여 올바른 명령을 로드하는 방식이다.

이 방식은 분기가 일반적으로 발생하지 않을 때 성능 향상을 가져오지만, 분기가 잘못 예측되면 성능 저하가 발생한다.

 

 

2-bit 예측기:

 

2-bit 예측기는 1-bit 예측기를 개선한 방식으로, 분기가 자주 일어날 때 잘못된 예측을 줄이기 위한 방법이다.

2-bit 예측기는 상태 머신을 사용하여 분기가 예측되었을 때 두 번의 잘못된 예측 후 예측 방향을 바꾸는 방식이다.

 

 

Check Yourself:

이 문제에서는 예측 정확도를 다룬다. 예측이 잘못되면 분기를 다루는 데 걸리는 시간이 증가하며, 예측을 잘못한 횟수에 따른 성능 저하를 보여준다.

답변 분석: 95% 정확도는 예측이 더 자주 맞추기 때문에 분기 예측기가 더 효율적이다. 이 예에서는 예측이 틀릴 확률이 낮은 분기에 대해서 더 좋은 성능을 기대할 수 있다.

 

 

 

두 가지 예측 방법:

 

1. Static Prediction: 분기가 항상 일어날지 일어나지 않을지 미리 정해놓고 예측하는 방식.

2. Dynamic Prediction: 프로그램의 실행을 추적하여 이전의 실행에 따라 분기가 일어날지 예측하는 방식.

 

문제 해결 및 요약:

 

분기 예측 최적화는 파이프라인 성능을 극대화하는 데 중요하며, 이를 위해서 동적 예측 방법을 사용하여 이전 실행 패턴을 학습하고 이를 바탕으로 향후 분기를 예측한다.