오늘은 맑음

Data Hazard/RAW, WAR, WAW 본문

Processor

Data Hazard/RAW, WAR, WAW

자전거 타는 구구 2019. 2. 19. 01:33
반응형

Data Hazard

 Pipeline은 프로세스의 성능을 높이기 위해서 사용합니다. 

프로세스의 동작주파수는 가장 동작주파수가 느린 회로의 동작주파수에 맞춰 동작하기 때문에 파이프라인을 통해 가장 오래 걸리는 연산을 잘게 쪼개 빠른 동작주파수로 동작할 수 있게 해 줍니다.

pipeline화 된 프로세스는 성능은 좋아지겠지만 이에 따른 문제가 발생하게 됩니다.

이것을 위험(Hazard)이라고 합니다.

오늘은 여러 Hazard 중 Data Hazard에 대해 알아보도록 하겠습니다.

Data Hazard는 총 3개로 나눌 수 있습니다.


1. RAW(쓰기 후 읽기/read after write)

 우리는 다음과 같은 5단계의 파이프라인을 사용한다고 가정하겠습니다.

파이프라인은 Instruction Fetch, Decode, Execute, Memory, WriteBack단계를 가집니다.


 만약 이러한 파이프라인을 갖는 구조에서 다음과 같은 명령어를 수행하면 어떻게 될까요?

 기본적으로 파이프라인에서는 Write Back단계에 Execute 단계에서 수행된 결과물을 register에 저장합니다.

따라서 다음과 같은 문제가 일어나게 됩니다.

1번 pipeline이 종료되기 전에 2번 pipeline의 E단계에서 R2를 요구하게 됩니다. 

또한 2번 pipeline이 종료되기 전에 3번 pipeline의 E단계에서 R4를 요구합니다.

이렇게 되면 2번과 3번 명령어의 R2와 R4에는 각각 이상한 값(쓰레기 값) 또는 이전 파이프라인의 결과물이 입력으로 들어가게 됩니다. 

따라서 원하는 값을 제대로 얻을 수 없는 문제가 발생하게 됩니다.

이러한 상황을 명령어 사이에 종속성(dependency)이 발생한다고 말합니다

앞, 뒤의 명령어가 다음 명령어의 실행에 영향을 끼치는 상황을 의미합니다.


이러한 문제를 Data forwarding, stall, scoreboarding으로 이를 방지할 수 있습니다.

Data forwarding은 다음과 같습니다.

 Execution단계에서 수행된 결과가 다음 명령어에서 필요로 한다면 결과값을 즉시 다음 pipeline에 전달해 연산이 가능하게 하는 방법입니다.

 stall의 경우 pipeline 사이에 bubble을 끼워넣어 WB단계가 끝날 때 까지 다음 명령어를 수행하는 pipeline을 멈추는 것을 의미합니다.

 stall은 pipeline을 멈추기때문에 그만큼 성능저하가 일어납니다.

 scoreboarding은 다음에 한번에 설명하도록 하겠습니다.




2. WAR(읽기 후 쓰기/write after read)

 이 후 설명할 WAW과 WAR Hazard는 병렬연산(Concurrent execution)에서 발생합니다.


 위와 같은 명령어가 실행됬다고 가정하겠습니다.

만약 2개의 thread가 동시에 위의 명령어를 수행한다고 하면 어떠한 결과가 나타날까요?

2가지 결과가 나타나게 될 것입니다.

 하나는 1번 명령어를 수행하는 thread가 먼저 끝난 경우, 나머지 하나는 2번 명령어를 수행하는 thread가 먼저 끝난 경우입니다.

즉, 병렬 컴퓨팅에서는 연산을 수행하는 thread중 어떤 thread가 먼저 끝나느냐에 따라 값이 바뀔 수 있습니다. 

이러한 경우를 WAR Hazard라고 합니다.


3. WAW(쓰기 후 쓰기/write after write)


 WAR Hazard와 마찬가지로 병렬연산에서 다음과 같은 명령어가 실행되었습니다.

과연 두개의 명령어가 종료된 후에는 어떤 값이 R2에 들어가 있을까요?

역시 WAR와 마찬가지로 아무도 모르게 됩니다.

1번 명령어가 먼저 끝나게 되면 결과값은 2번 명령어의 결과로 덮어씌워질 것입니다.

 하지만 2번 명령어가 먼저 끝나게 되면 결과값은 1번 명령어의 결과로 덮어씌워져 이후 명령어의 연산에도 영향을 끼치게 됩니다.


다음 포스팅에서는 이 세가지 Data Hazard를 해결할 수 있는 register scoreboarding에 대해서 공부해 보겠습니다.

반응형
Comments