컴퓨터 구조(13), Prefetching

2022. 6. 15. 22:41강의 내용 정리/컴퓨터구조

728x90
반응형

Prefetching


1. Prefetching

- 프로그램이 필요할 것같은 데이터를 미리 패치한다. 왜냐하면 메인 메모리에 대한 레이턴시가 매우 높기 때문에 이를 예측해서 적절한 순간에 미리 패치하면 더 빠르게 동작할 수 있다.

- 너무 빠르면 다른 것이 캐시에 못올라가서 미스날 수 있다. 따라서 적절한 순간에 넣는 것이 좋다.

- 어드레스를 액세스하는데 일정한 패턴이 있다면 프리패칭이 가능하다.

 

생각해 볼 것

- 예측 실패는 어떤 영향을 주는가. 

- 리소스를 더 사용하게 된다. 하지만 예측 실패가 발생한다고 해서 문제가 발생하지는 않다. 브랜치 예측은 다 날려야하기에 문제가 발생한다. 이와는 다르다. 잘못 가져오면 안쓰면 된다. 상대적으로 비용이 적다. 따라서 상태 복구가 필요하지는 않다.

 

Basic

- 프리패칭은 위에 있는 곳에서 모두 다 같이한다.

 

 

- 어떤 데이터가 필요하고, 언제 프리패칭하고, 어떤 메모리에 올릴 것인지, 누가 할지 등에 대해 정해야한다.

 

What

- 쓸모 없는거 패치하면 메모리 밴드위드, 캐시 공간, 에너지 등을 낭비할 수 있다.

- 큰 비용은 아니지만 일단 정확하게 하는 것은 중요하긴 하다.

- 프리패치 정확도 공식

- 패턴, 컴파일러가 데이터 스트럭처를 알고있음 등은 영향을 미친다.

 

How

- ISA에 프리패칭할 수 있는 명령어도 있어서 컴파일러에 넣을 수 있음 irregrular하면 어렵다.

- 하드웨어가 할 수 있다. 

- Excution-based는 쓰레드에서 실행된다.

 

성능

- 커버리지: 미스나는 것 중 얼마나 커버를 할지

- 타임: 제 시간에 가져온지 얼마나 되는지

- 위의 세가지를 모두 커버하는 것은 쉽지 않다.

- 밴드위드를 사용하는데 프리패치를 사용할때 비용이 든다.

- 캐시 오염: 캐시에 원래 있던 데이터 중 일부를 지워서 발생하는 미스

 

Effect of Runahead

- 파란색은 프리패칭을 잘 한 것이다.

- 잘한다면 퍼포먼스가 40%가량 올라간다.

- 하드웨어 비용관점에서 효율적이다.

 

 

 

예제)

- window: 아웃오브 오더 중 최대 몇 개 내에서 바꿀지 정하는 것

- L2에서 못찾으면 뒤에 있는 명령어는 stall이 발생할 수밖에 없다. 이후 리타이어할 수 없다.

 

벤치마크

- 빨간색은 스톨, 더 진한 빨간색은 L2 Miss이다. 전체 시간 중 스톨이 더 크다. 

 

 

- 윈도우 사이즈를 키우면 L2 스톨을 줄일 수 있기에 실행시간이 짧아진다.

- 아웃오브 오더를 할 때는 윈도우 사이즈를 키우는 것이 중요하다. 하지만 다음과 같은 문제가 있다.

 

 

- 파워, 버퍼도 커지고, 사이클 타임도 늘어난다.

 

Runahead Execution

- 정해진 윈도우 사이즈에서도 프리패치를 잘하면 성능을 높일 수 있다.

 

예시)

 

- 제한된 윈도우에서 미스가 나면 스톨이 발생한다. (레이턴시 > 윈도우 인경우) 

- 프리패치 런어해드인 경우에는 스톨 대신 런어해드를 한다. 문제가 될 것 같은 것을 미리 감지해서 가져온다. 

- 버려야하는 파이프라인 패널티도 존재하긴 한다.

 

 

- 결론적으로 성능을 높일 수 있다.

 

 

 

- 구현도 간단하고 정확도도 높인다. 낭비도 줄일 수 있다.

- 추가로 명령어를 실행해야한다. 밴드위드가 제한되어있어서 메모리 레벨에서 가져오지 못하면 그렇게 좋아지지 않기에 메모리의 병렬화가 중요하다. 

- 너무 빨리 프리패치를 하면 성능에 크게 좋아지지 않는다.

- 선 ROCK 이런 곳에서 사용한다.

 

 

728x90
반응형