문제: Pipeline Hazard의 유형과 제거 방안에 대해 기술하시오. (25점)
질문: Pipeline Hazard란 무엇인가요?
답변: Pipeline Hazard는 컴퓨터 아키텍처에서 파이프라인 프로세서의 성능을 저하시킬 수 있는 조건이나 사건을 말합니다. 파이프라인 프로세서는 여러 명령어를 동시에 처리하여 성능을 극대화하지만, 이 과정에서 발생할 수 있는 여러 가지 문제를 Pipeline Hazard라고 합니다. 이러한 위험 요소는 크게 세 가지 유형으로 분류됩니다: 데이터 해저드(Data Hazard), 구조적 해저드(Structural Hazard), 제어 해저드(Control Hazard).
질문: 데이터 해저드란 무엇이며, 그 유형은 어떤 것이 있나요?
답변: 데이터 해저드는 명령어 간의 데이터 의존성으로 인해 발생하는 해저드입니다. 주로 다음 세 가지 유형이 있습니다:
RAW (Read After Write): 한 명령어가 다른 명령어에 의해 쓰여진 값을 읽기 전에 읽는 경우 발생합니다.
A = B + C // 1단계에서 B와 C를 더하여 A를 생성
D = A + E // 2단계에서 A를 사용하려 하지만, A의 계산이 아직 완료되지 않았습니다.
WAR (Write After Read): 한 명령어가 이전 명령어의 값을 읽은 후에 동일한 위치에 쓰는 경우 발생합니다.
A = B + C // 1단계에서 B와 C를 더하여 A를 생성
B = D + E // 2단계에서 B에 값을 쓰게 되어 A의 계산 결과에 영향을 줄 수 있습니다.
WAW (Write After Write): 두 명령어가 동일한 레지스터에 값을 쓰는 경우 발생합니다.
A = B + C // 1단계에서 A에 값을 씁니다.
A = D + E // 2단계에서 A에 다시 값을 씁니다. 이전 값이 사라지게 됩니다.
질문: 구조적 해저드란 무엇인가요?
답변: 구조적 해저드는 프로세서의 하드웨어 자원 부족으로 인해 발생합니다. 예를 들어, 두 개의 명령어가 동시에 동일한 하드웨어 자원(예: ALU, 메모리)에 접근하려 할 때 발생합니다.
질문: 제어 해저드는 무엇인가요?
답변: 제어 해저드는 분기 명령어와 관련된 해저드입니다. 분기 명령어는 프로세서가 다음에 실행할 명령어의 주소를 결정하기 때문에, 이 시점에서 분기가 발생하면 파이프라인이 일시적으로 멈추거나 잘못된 명령어를 실행할 수 있습니다.
IF (A > B) THEN
X = Y + Z; // 분기가 발생하여 X에 대한 명령어가 실행될지 여부가 불확실함
질문: Pipeline Hazard를 제거하기 위한 방법은 무엇인가요?
답변: 각 유형의 해저드를 제거하기 위한 다양한 기법이 존재합니다.
데이터 포워딩(Data Forwarding): 이전 명령어에서 생성된 값을 다음 명령어가 필요할 때 직접 전달하여 대기 시간을 줄입니다.
스톨(Stalling): 해저드가 발생한 경우 해당 명령어를 일시적으로 정지시키고, 의존성이 해소될 때까지 대기합니다.
명령어 재배치: 컴파일러가 명령어 순서를 변경하여 해저드를 피할 수 있도록 합니다. 이 방법은 주로 데이터 의존성이 있는 명령어들 사이에서 수행됩니다.
하드웨어 리소스 확장: 여러 ALU, 메모리 포트를 추가하여 동시에 여러 명령어가 처리될 수 있도록 합니다.
파이프라인 설계 최적화: 하드웨어 구조를 설계할 때, 모든 자원이 효율적으로 사용되도록 조정합니다.
분기 예측(Branch Prediction): 분기 결과를 예측하여 미리 다음 명령어를 파이프라인에 로드합니다. 예측이 맞으면 성능이 향상되지만, 잘못 예측할 경우 파이프라인이 비워져야 합니다.
분기 지연 슬롯(Branch Delay Slot): 분기 명령어 다음에 실행할 수 있는 명령어를 삽입하여 파이프라인이 유휴 상태가 되지 않도록 합니다.
Pipeline Hazard는 파이프라인 프로세서의 성능을 저하시키는 중요한 요소입니다. 이를 해결하기 위한 다양한 기법들이 있으며, 이러한 기법들을 적절히 활용하면 파이프라인의 효율성을 극대화할 수 있습니다. 각 해저드 유형에 대한 이해와 그 해결 방안은 현대 컴퓨터 아키텍처 설계에 있어 매우 중요합니다.