오늘은 맑음

Data Prefetch 본문

Processor

Data Prefetch

자전거 타는 구구 2019. 2. 21. 14:00
반응형

Data prefetch


 Data prefetch란 앞으로 연산에 필요한 data들을 미리 가져오는 것을 의미합니다.

미리 가져온다... 미리 가져오면 좋은점이 어떤 것이 있을까요?


 바로 Memory latency를 감출 수 있습니다. 감추는 것은 어떤 것을 의미할까요?

 이전 cache에 대해 포스팅한 글에서 말했듯이 CPU의 연산속도보다 메모리에 접근하는 속도가 느리기 때문에 이를 보완하기 위해 다층구조의 cache를 사용한다고 했습니다. 

 아무리 보완하더라도 CPU에서 연산에 필요한 요청이 들어오게 되면 다시 데이터를 가져오는 시간이 걸리겠죠?

이를 Memory latency라고 하며 이를 감추는 방법을 Memory latency hiding기법이라고 합니다.


 이제 Memory latency를 prefetch를 통해 어떻게 감추는지를 알아보도록 하겠습니다.


 일반적인 구조에서는 CPU에서 연산에 필요한 데이터를 달라고 요청을 하면 메인 메모리와 캐시를 뒤져서 가져오게 됩니다. 이를 거쳐 데이터가 도착을 하게 되면 연산을 진행합니다. 

 이 때 데이터를 가져오는 동안 CPU는 일을 하지 않는 상황이 되어 매우 비효율적인 상황이 발생합니다.

이런 상황을 보완하고자 prefetch를 사용하여 CPU가 놀지 않고 최대한 일을 연속적으로 할 수 있게 도와줍니다.

 현재 CPU가 연산을 하는 동안 prefetcher는 다음 연산에 필요한 데이터를 유추해서 미리 CPU에서 가장 가까운 cache에 넣어놓게 되면 CPU가 다음 연산을 실행할 때 바로 데이터를 가져다가 연산을 할 수 있겠죠?

 이렇게 Memory latency를 감출 수 있습니다. CPU가 쉬지않고 일을 하게 되면 매우 효율적이겠죠?


 하지만 prefetch가 비효율적으로 동작하는 경우가 생길 수 있습니다.

1. prefetch의 정확도가 좋지 않은 경우

2. prefetch가 너무 일찍 일어나거나 늦게 일어나는 경우


 1번같은 상황에서는 만약 데이터를 잘못 가져오면 cache miss가 나는 상황이므로 다시 데이터를 가져와야 하는 상황이 발생해 prefetch의 이점을 제대로 활용 할 수 없게 됩니다. 따라서 정확도가 높은 prefetch를 해야 성능을 끌어올릴 수 있습니다.

 2번같은 경우 너무 데이터를 늦게 가져오는 경우 역시 CPU가 일을 하지 못하는 상황이 발생하여 성능면에서 큰 이득을 얻지 못합니다. 하지만 너무 빨리 가져오는 것은 왜 문제가 될까요?

 cache같은 경우 매우 작기 때문에 cache의 데이터 교체 정책(evict policy)에 따라 cache 내부에 있는 데이터들을 바꿔줍니다. 만약 너무 빠른 prefetch를 한다면 미리 가져온 데이터가 교체당해 막상 CPU가 데이터를 필요로 할 때 cache안에 존재하지 않아 다시 가져와야 하는 상황이 생기게 됩니다. 따라서 prefetch의 경우 너무 빨라도, 너무 느려도 좋지 않게 됩니다.



 



반응형

'Processor' 카테고리의 다른 글

Reservation station  (0) 2019.02.27
MSHRs(Miss Status Holding Registers)  (0) 2019.02.27
multi-thread processor에서의 scoreboard  (0) 2019.02.20
Register Scoreboarding/스코어보드  (2) 2019.02.19
Data Hazard/RAW, WAR, WAW  (1) 2019.02.19
Comments