2016-09-17 1 views
2

는 MIPS에 다음 코드를 고려 찾기 :모든 읽기 쓰기 후 (RAW) 데이터 의존성이

lw $1, 40($2) # I1 
add $2, $3, $3 # I2 
add $1, $1, $2 # I3 
sw $1, 20($2) # I4 

내 자신의 대답은 I3에 I2에서 $ 2, I3 및 I4에 I1에서 $ 1 RAW이며, I4, I3에서 I4로 $ 1에.

그러나 솔루션에는 I1에서 I4까지 $ 1이 포함되어 있지 않습니다. 왜 이렇게이다?

답변

1

이 솔루션에는 I1에서 I4까지 $ 1이 포함되어 있지 않습니다.

I4의 저장된 데이터 ($ 1)는 I3에서 가져오고 저장소 주소 ($ 2)는 I2에서 가져옵니다. 그 입력은 이 아니며 I1의입니다.

I1로드의 $ 1 출력은 I3 이후의 아무 것도 필요하지 않습니다.

(레지스터 이름이 변경된 순서가 맞지 않는 CPU에서 I3 add가 제거되면 아키텍처 참조 인 $ 1 레지스터가 덮어 쓰기 때문에 참조가 더 이상 존재하지 않으므로이를 유지하는 물리적 레지스터는 해제).

부하에서 시작하여 저장소로 끝나는 종속성 체인이 있습니다. 유용성이 있지만 위험 분석과는 별개의 문제입니다.

디펜스 체인이 루프 내에서 실행되는지 또는 각 반복에 별도의 종속성 체인이 있는지 여부를 찾는 경우 특히 코드에서 별도의 종속성 체인을 찾는 것이 비 순차적 실행과 관련이 있습니다 (OoOE가 다중 반복). 별도의 의존성 체인은 기본적으로 CPU가 찾아서 이용할 수있는 명령어 수준 병렬 처리와 같습니다.