참고 : jinh2352_데이터의존성, 두 변수 값 바꾸기에 대한 고찰: 후속편
데이터 의존성(Data Dependency)
- 명령어들 사이의 데이터 흐름
- 의존성 있는 명령은 순서대로 실행되어야 함
-> 최적화 시 고려 필수 고려
- 의존성 있는 명령은 순서대로 실행되어야 함
- 데이터 헤저드(Hazard) : 컴퓨터 구조에 한정하여, 이러한 의존성을 말함.
RAW (Read after Writer) 의존성
- 흐름 의존성(flow dependency), 진짜 의존성 (true dependency)
- 1번 명령이 계산 결과 생성
- 2번 명령이 사용
- @ : x기준, 2번 명령은 1번 명령이 끝이 나야 사용 가능.
- x의 값에 대해 Write -> Read 과정
x = y + 1; // (1) x에 대한 값 쓰기 z = x * 2; // (2) x에 대한 값 읽기
- x의 값에 대해 Write -> Read 과정
XOR-Swap
방식이 최적화가temp
방식 보다 어려운 이유
WAR (Write after Read)
- 반 의존성 (anti dependency), 가짜 의존성 (false dependency), 이름 의존성 (name dependency)
- 1번 명령에서 x 값 읽기
- 2번 명령에서 x 값 쓰기
- @ : x 기준, 2번 명령은 1번 명령과 동시 || 순서 변경에도 문제가 없음
z = x + 2; // (1) x = y + 1; // (2) <- (1) 번 명령은 (2)와 관련이 없음 a = x / 2;
의존성 제거
- (2) 번 명령의
x
의 이름을x1
등의 다른 이름으로 변경z = x + 2; x1 = y + 1; // 이후 `x`들도 전부 `x1`로 이름 변경 필요 a = x1 / 2;
- (2) 번 명령의
WAW (Write after Write)
- 출력 의존성 (output dependency), 가짜 의존성 (false dependency), 이름 의존성 (name dependency)
- 같은 대상 사용에 따른 의존성
- @ : WAR과 달리, 순서도 중요
x = z + 1; // (1) x = y + 3; // (2) a = x / 2;
의존성 제거
- (2) 번 명령의
x
의 이름을x1
등의 다른 이름으로 변경x = z + 1; x1 = y + 3; a = x1 / 2;
- (2) 번 명령의
'공부 > CS' 카테고리의 다른 글
C++ 과 C# 의 차이 (0) | 2024.05.22 |
---|---|
데이터 계층 (0) | 2023.06.28 |
파이프라인 데이터페스 (0) | 2023.06.28 |
MIPS 데이터 패스 구동 방식 (0) | 2023.06.28 |
MIPS 주소 방식 (0) | 2023.06.28 |