티스토리 뷰
(* 이 포스트는 MIT에서 제공되는 Computation Structures 3의 강좌를 요약한 내용이다.)
Memory의 가장 큰 목표는 적당한 capacity를 가지면서 빠른 Access time을 가지는 것이다. 하지만 locality라는 특성때문에 capacity가 커지면 커질수록 해당 영역에 대한 Access time은 커질 수밖에 없다. 이를 해결하기 위해서 대부분의 CPU는 몇가지 단계로 나눠진 Cache level을 가진다.
Access time을 보면 알겠지만 level이 낮을수록 용량이 낮지만 그만큼 CPU에 가깝기 때문에 Access time에서 이점을 가져올 수 있고, level이 높을수록 access time이 높아지면서 더 많은 데이터를 가질 수 있게 된다.
Cache의 역할은 CPU가 자주 access 하는 memory location에 대해서 그 안에 들어있는 정보를 가지고 있어 추후에 CPU가 이 정보를 얻고자 할때 memory에서 읽어오는 것이 아닌 cache에서 전달하는 역할을 한다. 물론 그 안에 정보가 없을 경우에는 memory로부터 정보를 얻어오기 때문에 손해를 볼수도 있겠지만, 일단 access time 관점에서는 그정도를 감수하고 cache를 사용하게 된다.
그런데 사실 cache까지의 요소는 CPU에 이미 들어있는 요소이고, cache에 저장되는 내용 역시 CPU내의 특정장치가 관리한다. 우리가 혹은 개발자가 직접 얻고 확인할 수 있는 부분은 Cache 이후의 요소의 요소들, 다시 말해 primary storage(memory)와 secondary storage(flash memory, or HDD)들이 된다. 이런 영역을 Virtual Memory System이라고 한다.
위와 같은 구조로 되어 있다고 했을때 Virtual Memory system을 구현하는데 있어서 관심있게 볼 요소는 두가지이다.
- 접근시 발생하는 latency
- Sequential Access
우선 Cache에서 Main memory간 데이터 전달이 발생할 때 두 요소간 access time의 차이는 10배에서 100배정도이다. 하지만 Virtual Memory System 사이에서의 요소간의 데이터 전달이 발생할 경우 차이는 많게는 100000배까지 난다. 또한 데이터를 조금씩 전달하냐 많이 전달하냐를 따지는 sequential access의 입장에서도 DRAM보다는 Disk에서 sequential access를 하는 것이 조금더 좋다. 다시 말해 한꺼번에 데이터를 읽어오면 Disk에 있는 내용을 또 읽어올 필요가 없기 때문에 그만큼 Access time 관점에서 효율적이라는 것이다.
지금 이런 내용을 다루는 이유는 바로 miss라는 것이 존재하기 때문이다. 즉 원하는 data가 다음 단계에서 없을 경우 그 이후의 단계에도 access가 필요하기 때문에 최소한 이런 memory system을 구축할 때는 miss가 적게 발생하는 방향으로 고려를 한다. 따라서 이런 miss를 줄이기 위해서, 특히 Virtual memory system에서 발생할 수 있는 miss를 줄이기 위해서 여러가지 특성을 고려해야한다.
우선 첫번째는 Associativity인데, miss ratio를 낮출 수 있을만큼 높아야 한다.
두번째로는 데이터가 전달되는 크기인데, 앞에서 언급했던 것처럼 locality의 특성때문에 되도록이면 큰 데이터를 한번에 읽어와 miss로 인한 access가 발생하지 않도록 해야 한다.
마지막으로 miss가 발생할 경우 write가 수행되는 규칙(write policy)을 말하는데, cache write policy를 살펴보면 write-back / write-through 등이 있다. 이중에서 앞에서 언급했던 miss를 최소화 하기 위해서는 miss 때에만 write하는 Write back policy를 선택해야 할 것이다.
대충 Virtual memory가 존재하는 이유와 구현시 고려 사항에 대해서 살펴봤다.
'Study > Architecture' 카테고리의 다른 글
[Architecture] Page faults (0) | 2016.06.29 |
---|---|
[Architecture] Basics of Virtual Memory (2) (0) | 2016.06.26 |
[Architecture] Basic of Virtual Memory (1) (1) | 2016.06.16 |
[Data] Error Correction (0) | 2015.09.10 |
[Data] Huffman`s Algorithm (0) | 2015.09.07 |
[Data] Variable Length Encoding (1) | 2015.09.07 |
[Data] 2`s complement encoding (0) | 2015.09.06 |
- Total
- Today
- Yesterday
- bias
- Windows Phone 7
- SketchFlow
- Variance
- 파이썬
- windows 8
- processing
- RL
- End-To-End
- Off-policy
- 한빛미디어
- Kinect for windows
- Offline RL
- DepthStream
- dynamic programming
- ai
- reward
- 강화학습
- Pipeline
- Kinect
- PowerPoint
- arduino
- Policy Gradient
- Expression Blend 4
- Distribution
- TensorFlow Lite
- 딥러닝
- Gan
- Kinect SDK
- ColorStream
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |