Memory, Cache Locality, and why Arrays are Fast (Data Structures and Optimization)
Array 기본 개념, Memory Hierarchy에 대한 간략한 영상
메모리 구조 - Each block stores 1 byte of data - Address increments sequentially
Contiguous allocation : Chunk as a whole
Non-contiguous : Fragmented
Retrieving data with known index is super fast;
단순 연산으로 원하는 위치를 O(1)에 계산할 수 있기 때문
Contiguous array의 단점 :
앞/중간 부분에서의 삽입, 삭제가 어렵다 (뒤에 줄지어 있는 데이터들을 한 칸씩 당기거나 밀어줘야 하므로)
Fast CPU, but slow and fragmented memory
= overhead at retrieving data
Q. How to save time retrieving data from memory? (Optimization) -> Cache Hierarchy (L1/2/3 Caches)
CPU가 메모리에서 데이터 읽을 때 일어나는 일 :
메모리를 바로 참조하는게 아니라, L1 - L2 - L3 캐시 순으로 먼저 탐색한다.
Cache referencing 속도는 일반 메모리보다는 몇 백배 수준으로 빠르기 때문에,
이런 Hierarchy는 CPU가 데이터를 읽어오는 속도를 크게 개선함
캐시에 데이터가 없는 경우, 메모리에서 가져올 수 밖에
→ 이때, 그냥 필요한 데이터만 가져오는게 아니라, 주변 블록을 함께 들고 온다 (cache block)
데이터 처리가 가지는 특성 떄문 - Temporal/Spatial locality https://talkingaboutme.tistory.com/entry/Study-Memory-Hierarchy-1
+) Prefetcher : 지금 사용하지 않지만, 미래에 사용할 것 같은 데이터 chunk of block 채로 가져와서 캐싱하는 것
https://wh00300.tistory.com/90
많은 언어에서 기본적으로 지원하는 Dynamic Array의 구조 :
그냥 많은 블록 미리 선언해두고, size만 조절하는 식 (Memory inefficient 하지 않나? 진짜 이렇다고?)
Keywords : memory latency, memory hierarchy
'<기타 공부> > [Tech-CS 글 및 영상]' 카테고리의 다른 글
[Blockchain] Why is Bitcoin block time 10 minutes? (0) | 2022.04.22 |
---|---|
[Tip] 처음보는 복잡한 코드를 분석하는 좋은 방법 있을까요? (0) | 2022.03.18 |
[Rust][노마드코더] Rust 특징, 왜 배워야 할까 (0) | 2022.02.08 |
[블록체인][3Blue1Brown] But how does bitcoin actually work? (0) | 2022.01.08 |
가슴을 뛰게하는 미래지향적 운영체제론, CS4414: Operating Systems by David Evans (0) | 2021.12.02 |