data hazard cpu pipelining

agnusdei·2024년 10월 8일
0

Hardware & Software

목록 보기
12/136

데이터 해저드의 종류

데이터 해저드는 두 명령어가 동일한 데이터에 접근할 때 발생하며, 크게 세 가지로 분류됩니다:

1.	RAW (Read After Write) 해저드:
•	한 명령어가 데이터를 쓰기(Write)하기 전에 다른 명령어가 해당 데이터를 읽으려고(Read) 할 때 발생합니다.
•	예:  (쓰기) →  (읽기). 이 완료되기 전에 가 을 읽으려 하면 RAW 해저드가 발생합니다.
2.	WAR (Write After Read) 해저드:
•	한 명령어가 데이터를 읽기(Read)하기 전에 다른 명령어가 그 데이터를 쓰려고(Write) 할 때 발생합니다. 이는 주로 파이프라인 구조가 복잡할 때 나타납니다.
•	예:  (읽기) →  (쓰기). 가 의 읽기 작업이 끝나기 전에 데이터를 덮어쓰려 하면 WAR 해저드가 발생합니다.
3.	WAW (Write After Write) 해저드:
•	두 명령어가 동일한 레지스터에 쓰기(Write) 작업을 수행할 때, 순서에 맞지 않게 실행되면 발생합니다.
•	예:  → . 가 의 결과를 덮어쓰려 하면 WAW 해저드가 발생합니다.

데이터 해저드를 해결하는 방법

이러한 해저드를 해결하기 위해 포워딩, 인터록, 명령어 스케줄링과 같은 기법이 사용됩니다.

  1. 포워딩 (Forwarding)

포워딩은 RAW 해저드를 해결하기 위한 주요 방법으로, 데이터를 레지스터에 기록하기 전에 후속 명령어가 직접 사용할 수 있도록 전달하는 기법입니다.

동작 방식

•	명령어가 산술 연산을 완료하고 결과를 생성하면, 그 결과를 포워딩 유닛을 통해 즉시 다음 명령어로 전달합니다.
•	예:  연산이 끝난 후, 의 결과가 레지스터에 기록되기 전에  명령어에서 그 결과를 바로 사용할 수 있도록 포워딩합니다.

개선 효과

•	포워딩을 사용하면 스톨(지연) 없이 파이프라인에서 연속적으로 명령어를 실행할 수 있습니다. 성능을 크게 개선할 수 있는 효율적인 방법입니다.
  1. 인터록 (Interlock)

인터록은 하드웨어가 데이터 해저드를 감지하고, 해당 데이터를 사용할 수 있을 때까지 파이프라인을 멈추는 방식입니다. 특히 RAW 해저드를 다루는 기본적인 방법입니다.

동작 방식

•	해저드를 감지하면 하드웨어가 자동으로 명령어의 실행을 멈추고, 필요한 데이터가 준비될 때까지 후속 명령어의 진행을 지연시킵니다.
•	예: 의 결과가 완성되기 전, 에서 인터록 메커니즘이 동작하여 이 준비될 때까지 를 멈춥니다.

개선 효과

•	인터록은 데이터 일관성을 보장하지만, 스톨을 발생시키므로 파이프라인 성능에 부정적인 영향을 미칠 수 있습니다.
  1. 명령어 스케줄링 (Instruction Scheduling)

명령어 스케줄링은 데이터 해저드를 최소화하기 위해 명령어의 순서를 조정하는 방법입니다. 컴파일러나 하드웨어에서 미리 해저드를 분석하고, 의존성이 없는 명령어들을 먼저 실행하여 스톨을 줄입니다.

동작 방식

•	컴파일러 기반 스케줄링: 컴파일러는 명령어들의 의존성을 분석하여, 데이터 해저드를 일으키지 않도록 명령어 순서를 재배치합니다.
•	하드웨어 기반 스케줄링: CPU가 명령어를 실행할 때 동적으로 명령어 순서를 재조정하여 데이터 해저드를 피합니다.

개선 효과

•	명령어 스케줄링은 스톨을 최소화하며, 파이프라인의 성능을 최적화하는 데 기여합니다.

결론: 데이터 해저드 해결 방안의 비교

•	포워딩: 연산 결과를 즉시 전달하여 스톨을 방지하고 성능을 향상시킵니다. 주로 RAW 해저드를 해결하는 데 사용됩니다.
•	인터록: 데이터가 준비될 때까지 파이프라인을 멈춰 일관성을 보장하지만, 성능 저하를 초래할 수 있습니다.
•	명령어 스케줄링: 명령어 순서를 조정해 해저드를 최소화하며, 스톨 없이 명령어를 효율적으로 처리합니다.

이 기법들은 파이프라인에서 데이터 해저드를 해결하여 CPU 성능을 최대한 높이고, 명령어 처리 속도를 개선하는 데 중요한 역할을 합니다.

0개의 댓글