2022. 6. 15. 22:41ㆍ강의 내용 정리/컴퓨터구조
Prefetching
1. Prefetching
- 프로그램이 필요할 것같은 데이터를 미리 패치한다. 왜냐하면 메인 메모리에 대한 레이턴시가 매우 높기 때문에 이를 예측해서 적절한 순간에 미리 패치하면 더 빠르게 동작할 수 있다.
- 너무 빠르면 다른 것이 캐시에 못올라가서 미스날 수 있다. 따라서 적절한 순간에 넣는 것이 좋다.
- 어드레스를 액세스하는데 일정한 패턴이 있다면 프리패칭이 가능하다.
생각해 볼 것
- 예측 실패는 어떤 영향을 주는가.
- 리소스를 더 사용하게 된다. 하지만 예측 실패가 발생한다고 해서 문제가 발생하지는 않다. 브랜치 예측은 다 날려야하기에 문제가 발생한다. 이와는 다르다. 잘못 가져오면 안쓰면 된다. 상대적으로 비용이 적다. 따라서 상태 복구가 필요하지는 않다.
Basic
- 프리패칭은 위에 있는 곳에서 모두 다 같이한다.
- 어떤 데이터가 필요하고, 언제 프리패칭하고, 어떤 메모리에 올릴 것인지, 누가 할지 등에 대해 정해야한다.
What
- 쓸모 없는거 패치하면 메모리 밴드위드, 캐시 공간, 에너지 등을 낭비할 수 있다.
- 큰 비용은 아니지만 일단 정확하게 하는 것은 중요하긴 하다.
- 프리패치 정확도 공식
- 패턴, 컴파일러가 데이터 스트럭처를 알고있음 등은 영향을 미친다.
How
- ISA에 프리패칭할 수 있는 명령어도 있어서 컴파일러에 넣을 수 있음 irregrular하면 어렵다.
- 하드웨어가 할 수 있다.
- Excution-based는 쓰레드에서 실행된다.
성능
- 커버리지: 미스나는 것 중 얼마나 커버를 할지
- 타임: 제 시간에 가져온지 얼마나 되는지
- 위의 세가지를 모두 커버하는 것은 쉽지 않다.
- 밴드위드를 사용하는데 프리패치를 사용할때 비용이 든다.
- 캐시 오염: 캐시에 원래 있던 데이터 중 일부를 지워서 발생하는 미스
Effect of Runahead
- 파란색은 프리패칭을 잘 한 것이다.
- 잘한다면 퍼포먼스가 40%가량 올라간다.
- 하드웨어 비용관점에서 효율적이다.
예제)
- window: 아웃오브 오더 중 최대 몇 개 내에서 바꿀지 정하는 것
- L2에서 못찾으면 뒤에 있는 명령어는 stall이 발생할 수밖에 없다. 이후 리타이어할 수 없다.
벤치마크
- 빨간색은 스톨, 더 진한 빨간색은 L2 Miss이다. 전체 시간 중 스톨이 더 크다.
- 윈도우 사이즈를 키우면 L2 스톨을 줄일 수 있기에 실행시간이 짧아진다.
- 아웃오브 오더를 할 때는 윈도우 사이즈를 키우는 것이 중요하다. 하지만 다음과 같은 문제가 있다.
- 파워, 버퍼도 커지고, 사이클 타임도 늘어난다.
Runahead Execution
- 정해진 윈도우 사이즈에서도 프리패치를 잘하면 성능을 높일 수 있다.
예시)
- 제한된 윈도우에서 미스가 나면 스톨이 발생한다. (레이턴시 > 윈도우 인경우)
- 프리패치 런어해드인 경우에는 스톨 대신 런어해드를 한다. 문제가 될 것 같은 것을 미리 감지해서 가져온다.
- 버려야하는 파이프라인 패널티도 존재하긴 한다.
- 결론적으로 성능을 높일 수 있다.
- 구현도 간단하고 정확도도 높인다. 낭비도 줄일 수 있다.
- 추가로 명령어를 실행해야한다. 밴드위드가 제한되어있어서 메모리 레벨에서 가져오지 못하면 그렇게 좋아지지 않기에 메모리의 병렬화가 중요하다.
- 너무 빨리 프리패치를 하면 성능에 크게 좋아지지 않는다.
- 선 ROCK 이런 곳에서 사용한다.
'강의 내용 정리 > 컴퓨터구조' 카테고리의 다른 글
컴퓨터 구조(14), Virtual Memory (0) | 2022.06.15 |
---|---|
컴퓨터 구조(12), Memory Hierarchy & Caches (0) | 2022.06.13 |
컴퓨터 구조(11), Multithreading (0) | 2022.06.13 |
컴퓨터 구조(10), Super Scalar (0) | 2022.06.12 |
컴퓨터 구조(9), Control Dependence Handling: Predicated Execution and Loop Unrolling (0) | 2022.06.11 |