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: 프로그램의 실행을 추적하여 이전의 실행에 따라 분기가 일어날지 예측하는 방식.
문제 해결 및 요약:
분기 예측 최적화는 파이프라인 성능을 극대화하는 데 중요하며, 이를 위해서 동적 예측 방법을 사용하여 이전 실행 패턴을 학습하고 이를 바탕으로 향후 분기를 예측한다.
'Book > COMPUTER ORGANIZATION AND DESIGN RISC-V' 카테고리의 다른 글
4. The Processor (4.11 Parallelism via Instructions) (1) | 2024.11.17 |
---|---|
4. The Processor (4.10 Exceptions) (1) | 2024.11.17 |
4. The Processor (4.8 Data Hazards:Forwarding versus Stalling) (0) | 2024.11.17 |
4. The Processor (4.7 Pipelined Datapath and Control) (0) | 2024.11.17 |
4. The Processor (4.6. Data Hazard) (1) | 2024.11.15 |