일반적으로 Memory 하면 DRAM, NAND Flash, Cache에 대해 많이 들어봤을 것이다.
그렇다면 DRAM에서 RAM은 무엇을 의미하는 것일까?
RAM(Random Access Memory)
-Data의 위치에 상관없이, 일정한 access time을 가지는 Memory를 의미한다.
- 그렇다면 왜 일정한 access time을 가지는 것이 더 중요할까?
- 예측 가능한 access time( = 일정한 access time)이 access를 조금 더 빠르게 하는 것보다 더 좋기 때문이다.( HW복잡도 감소 등)
e.g. DRAM, SRAM, Flash Memory, SSD
Non-random access Memory
-non-random access memory의 경우 데이터의 위치에 따라 access time이 달라짐
-일반적으로 non-random access memory의 경우 random access memory보다 10^5 ~ 10^8까지 느리다.
Bottleneck(병목현상)
- Logic은 점점 더 빨라지고 있고, 메모리 용량도 점점 더 커지고 있지만 메모리는 로직만큼 빨라지지 못해 발생하는 현상
Design Philosophy(설계 철학)
- 두 종류의 메모리를 모두 활용하는 Hybrid Solution을 사용하자
- 자주 사용되는 데이터는 더 빠르고 비싼 메모리(cache)에 저장
- 나머지는 느리지만 더 저렴한 메모리에 저장
이를 Memory Hierarchy (메모리 계층구조) 라고 한다.
Cache
Block
- 서로 다른 계층 사이에서 주고받는 데이터의 단위
Hit
- 우리가 access하려는 data가 해당 level의 cache에 존재한다 → Hit!
- Hit rate: 해당 level cache에 data가 존재하는 비율
- Hit time: 해당 level cache를 접근하는데 걸리는 시간
Miss
- 우리가 access 하려는 data가 해당 level의 cache에 없다 → Miss!
- 프로세서는 data를 다음 level 캐시에서 불러올 때까지 기다려야 한다.
- Miss rate = (1 - Hit rate)
- Miss penalty = 다음 level cache에서 data를 access 하는데 걸리는 time + 해당 level cache의 data를 저장(교체) 하는데 걸리는 time
- Hit Time << Miss penalty
따라서 성능을 올리기 위해서는 Hit rate를 올리고 Hit time을 줄이는 것이 중요함
이를 위해 사용되는 것이 Locality(지역성)이다.
Principle of locality
- program들은 보통 특정시간 동안 상대적으로 적은 부분의 address에 접근한다.
- 90%의 메모리 접근은 전체 Memory address 중 10%에서만 이루어지기 때문에 이를 활용하는 것이 매우 유용하다
Types of locality
- Temporal locality(시간적 지역성)
- 만약 어떤 data가 최근에 사용되었다면, 곧 다시 사용될 가능성이 높음
- cache에서는 시간적 지역성을 활용할 때
- 1. 최근에 접근한 데이터를 프로세서에서 가까운 메모리에 저장
- 2. Data를 evict 하고 새로운 data를 저장할 공간을 마련할 때도 최근에 접근된 data를 캐시에 남겨놓음(LRU)
- Spatial locality(공간적 지역성)
- 만약 어떤 data가 최근에 사용되었다면, 그 주변에 있는 data가 곧 사용될 가능성이 높음
- cache에서는 공간적 지역성을 활용할 때
- 연속적인 word로 구성된 blcok을 상위레벨 캐시에 저장함
Average Access Time
- Access time = hit time + miss penalty * miss rate
- 따라서 Hit time은 낮고, Hit rate는 높아야 한다.
※ miss penalty가 hit time보다 매우 매우 높기 때문
Handling a Cache Miss
-Cache hit 경우, hit time이 1 cycle 이내라면 pipline에 영향을 미치지 않지만, cache miss의 경우 pipline에 영향을 준다.
Instruction Miss인 경우와 Data Miss인 경우에 따라 action이 달라진다.
1. Instruction Miss 인 경우
- 기존 PC값을 메모리에 전달함
- 메인 메모리에서 기존 PC값에 해당하는 명령어를 읽어올 때까지 기다림
- 읽어 들인 명령어 값을 적절한 캐시 공간에 씀
- 명령어 수행을 재시작
2. Data Miss인 경우
- Stall 발생
- 메인 메모리에서 해당 데이터를 읽어 들일 때까지 기다림
- 메모리에서 읽어온 값으로 Pipeline 수행을 계속함
'Computer Architecture' 카테고리의 다른 글
Computer Architecture - Memory (3) (0) | 2024.12.30 |
---|---|
Computer Architecture - Memory (2) (1) | 2024.12.26 |
Computer Architecture - Pipeline (0) | 2024.12.26 |
Computer Architecture - Floating Points (0) | 2024.12.23 |
Computer Architecture - Performance (0) | 2024.12.23 |