cpu pipeline hazard

agnusdei·2024년 10월 8일
0

Hardware & Software

목록 보기
13/136

제어 해저드(Control Hazard)와 구조적 해저드(Structural Hazard)는 파이프라인 처리에서 발생할 수 있는 두 가지 주요 해저드 유형입니다. 각각의 해저드는 특정 조건에서 명령어 처리 순서에 영향을 미쳐 성능 저하를 일으킬 수 있습니다. 각 해저드의 개념과 해결 방법을 설명하겠습니다.

  1. 제어 해저드 (Control Hazard)

제어 해저드는 분기 명령어나 점프 명령어가 실행될 때 발생하는 문제입니다. 분기 명령어의 결과에 따라 프로그램의 흐름(제어 흐름)이 변경되는데, 파이프라인 구조에서는 분기 결과가 결정되기 전에 이미 다른 명령어들이 파이프라인에서 실행되고 있을 수 있습니다. 이러한 경우, 잘못된 명령어가 실행되면 성능이 저하되거나 오류가 발생할 수 있습니다.

동작 방식

•	분기 명령어가 파이프라인의 초기에 있으면, 분기 결과가 나올 때까지 다음에 실행될 명령어를 정확히 알 수 없기 때문에 파이프라인에 이미 로드된 명령어들이 무효화될 가능성이 있습니다.
•	예를 들어,  명령어가 있을 때, 파이프라인은 조건을 평가하기 전까지 다음 명령어가 무엇인지 알 수 없습니다. 이 때문에 파이프라인에 이미 다음 명령어를 로드하면, 분기 결과에 따라 그 명령어들이 무효화되어야 할 수 있습니다.

해결 방법

•	분기 예측 (Branch Prediction): 하드웨어에서 분기 명령어가 어떤 경로로 갈지 미리 예측하여 파이프라인에 로드할 명령어를 선택하는 방법입니다. 예측이 틀리면 파이프라인을 비우고 다시 시작하지만, 예측 성공률이 높을 경우 성능 향상이 큽니다.
•	분기 지연 슬롯 (Branch Delay Slot): 분기 명령어 바로 뒤에 실행될 명령어를 미리 정해서 분기 명령어가 완료되기 전까지 파이프라인을 채우는 방식입니다.
•	명령어 플러싱 (Instruction Flushing): 분기 결과가 틀렸을 경우, 파이프라인에 이미 로드된 잘못된 명령어들을 모두 제거하고 다시 명령어를 로드합니다.
  1. 구조적 해저드 (Structural Hazard)

구조적 해저드는 하드웨어 리소스의 부족으로 인해 여러 명령어가 동시에 실행될 수 없을 때 발생합니다. 파이프라인에서 여러 명령어가 동시에 실행되기 때문에, 명령어들이 같은 하드웨어 자원을 동시에 요구할 경우 충돌이 발생하여 해저드가 생깁니다.

동작 방식

•	파이프라인에서 여러 명령어가 동시에 같은 리소스를 필요로 하면, 그 리소스를 누가 사용할지를 결정해야 합니다. 예를 들어, 두 명령어가 동시에 메모리에 접근하려고 할 때, 메모리 리소스가 충분하지 않으면 구조적 해저드가 발생합니다.
•	예: 메모리 액세스 단계(MEM)에서 두 명령어가 동시에 메모리 접근을 요구할 경우, 파이프라인이 한 번에 한 명령어만 처리할 수 있어 구조적 해저드가 발생합니다.

해결 방법

•	리소스 중복 (Resource Duplication): 구조적 해저드를 방지하기 위해 동일한 리소스를 중복으로 배치합니다. 예를 들어, 메모리 액세스를 동시에 처리하기 위해 별도의 읽기 전용 메모리와 쓰기 전용 메모리를 사용하는 것입니다.
•	파이프라인 스톨 (Pipeline Stall): 리소스가 부족할 경우, 한 명령어가 리소스를 사용할 때 다른 명령어의 실행을 일시적으로 멈추는 방식입니다. 해당 명령어가 완료될 때까지 기다린 후, 다음 명령어를 실행하게 됩니다.

정리

•	제어 해저드 (Control Hazard): 분기 명령어로 인해 발생하는 해저드로, 잘못된 명령어가 파이프라인에 들어올 수 있는 문제입니다. 분기 예측이나 플러싱을 통해 해결할 수 있습니다.
•	구조적 해저드 (Structural Hazard): 동일한 하드웨어 자원을 두 명령어가 동시에 요구할 때 발생하며, 리소스 중복이나 파이프라인 스톨을 통해 해결할 수 있습니다.

이 두 가지 해저드는 파이프라인 성능에 영향을 미치므로, 이를 해결하는 기법들이 CPU 설계에서 매우 중요한 역할을 합니다.

0개의 댓글