일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- AI
- deep learning
- regression
- LG Aimers 4th
- 티스토리챌린지
- 회귀
- 오블완
- Classification
- 지도학습
- 딥러닝
- OpenAI
- LG
- LG Aimers
- GPT-4
- ChatGPT
- 해커톤
- 머신러닝
- Machine Learning
- gpt
- supervised learning
- PCA
- LLM
- 분류
- Today
- Total
SYDev
[컴퓨터 구조] Lecture 17: Memory Hierarchy - Part1 본문
경희대학교 김정욱 교수님의 컴퓨터 구조 강의 내용을 기반으로 한 정리글
ROM vs. RAM
ROM(Read Only Memory)
- 읽을 수만 있는 메모리
- Non-vollatile memory(비휘발성 메모리): 전원이 꺼져도 영구정으로 파일을 저장
- Mask ROM: 반도체 생산 공정인 마스킹 단계에서, 고정된 데이터 회로 패턴으로 생산하는 방식
RAM(Random Access Memory)
- 일시적 메모리
- Read-write memory: 읽고 쓰기 가능
- Volatile memory: 일시적으로 파일을 저장한다 -> 컴퓨터가 작동중일때
- ex) DRAM, SRAM
SRAM vs. DRAM
SRAM(Static Random Access Memory)
- cache memory(캐시 메모리)
- 한 비트 표현을 위해 6개 이상의 트랜지스터 필요: DRAM에 비해 집적도가 낮고, 소비 전력이 큼
- 플립플롭 소자로 구성: 전원이 연결된 동안 내용 계속 유지
- 속도가 빠름: SRAM은 capacitor 사용 X -> refresh(충전) 필요 없음
-> 두 입력 값은 서로 다른 값을 가진다.
-> Set이 1이면 플립플롭에 의해서 1 유지
-> Reset이 1이면 플립플롭에 의해서 0 유지
DRAM(Dynamic Random Access Memory)
- 커패시터 사용 -> 시간 지나면 스스로 방전 -> 전원이 계속 공급되더라도, 커패시터가 주기적으로 재충전되어야 기억된 내용 유지
- 충전이 필요하므로, SRAM보다 상대적으로 느림
- 회로가 비교적 간단하고 가격이 저렴
- 집적도가 높음 -> 대용량의 기억장치에 주로 사용
- 전원이 꺼지면 자료 계속 보존 불가능
SRAM | DRAM | |
구조적 특징 | 플립플롭 | 커패시터 |
휘발성/비휘발성 | 휘발성 | 휘발성 |
용량 | 작다 | 크다 |
가격 | 비싸다 | 저렴하다 |
속도 | 빠르다 | 느리다 |
재충전 여부 | 재충전 필요 X | 재충전 필요 O |
Memory Hierarche
메모리 계층 구조
Principle of Locality(국소성의 원리)
Temporal locality
- 최근에 접근한 적이 있는 item -> 또 접근할 가능성이 높음
Spatial locality
- 접근된 아이템에 가까운 주소의 아이템에 접근할 가능성이 높음
- 메모리가 잘 정리되어있다는 가정
Block
- 복사해오는 정보의 최소 단위
데이터가 upper leveld에 존재
- hit: upper level(cache)에 존재하면 hit이라 함
- Hit rate(hit ratio): cache가 적중되는 비율 -> 메모리 계층 구조의 성능 척도
- Hit time: 원하는 것이 cache에 존재하는지 확인하는 시간
데이터가 upper level에 존재하지 않는 경우
- miss: 한 번도 부른 적이 없거나, 부른 적이 있는데 캐시 용량이 작아서 지워진 데이터 -> hit되지 못하면 miss라 함
- Miss rate(miss ratio): upper level에서 cache가 적중되지 않은 비율 -> miss ratio = 1 - hit ratio
- Miss penalty: lower level에서 cache로 block을 교체하는 시간 + cache에서 processor로 block을 전달해주는 시간
Cache Memory
Cache
- 메모리 계층 구조에서 CPU에 가장 가까운 단계
Direct-mapped cache
- 각 메모리의 위치가 캐시의 정확히 한 위치에 매핑되는 구조
- modulo 연산을 통해서 위치 계산
-> memory의 위치는 5bit인 것에 비해, cache는 3비트
-> memory의 위치에 대해 3비트(2^3 = 8) modulo연산
-> 29는 11101 mod 1000 = 101
-> 5는 00101 mode 1000 = 101
1. 우리가 원하는 data item이 cache에 존재하는지 아는 방법
- cache에 valide bit 추가
- valid bit: entry가 유효한 주소(valid address)를 담고 있는지 확인하는 지표
- initial valid bit value: 0
- cached에 데이터가 저장돼있으면 valid bit = 1
2. valid bit가 1이면, 그것을 어떻게 찾을 것인가
- cache에 tag를 설정
- tag: 주소 정보를 포함 -> 요청된 word에 적합한 cache의 word를 판별하기 위한 정보
Accessing a Cache
Data Field
- Data field에는 우리가 원하는 데이터가 저장됨!! not address(ex: 10110)
10110 요청
miss -> cache로 가져온 이후 index110: v = Y(1), tag(10), Data
00110 요청
v = Y -> but, tag(10)가 requested data의 tag(00)와 일치하지 않음 -> switch(10110 -> 00110): tag와 data 교체
1 word block
- address(32-bit ) = Tag(20-bit) + Cache index(10-bit) + Byte offset(2-bit)
- byte offset? 주소는 4의 배수이기 때문
- index를 이용
- 해당 index의 block에 valid bit(1 or 0) + tag field의 일치 여부(1 or 0) -> and gate
- 둘 다 1이면 hit
Larger block size
- 접근하려는 블록에 여러 개의 워드 존재 -> block size가 1보다 큰 경우
- 주소: Tag(32 - n - m - 2 bit) + Cache Size(n bit) + Block Offset(m bit) + Offset(2 bit)
- 메모리의 주소를 이용하여 cache memory에 접근
- cache size: 2^n개의 index 존재, Block Offset: 2^m개의 words 가짐
-> 만약 캐시가 64개의 블록을 사용하고, 한 블록 당 16byte를 저장한다면? -> 16 byte = 4 words = 2^2 words
-> 2^(m+2) = 16 ->> m은 2
-> 2로 byte addressing, cache size(index) n은 6, block offset m은 2(block의 단위!!!!), 남은 field는 tag
주소 구조에서 Cache size와 Block Offset의 위치
- 현재 구조는 Block Offset에 Byte addressing이 적용된 형태 -> 4가 곱해짐
- 만약 cache size와 block offset의 위치가 바뀌면 -> offset + cache size만큼 block offset(block size)가 커짐
- 원래는 0, 4, 8, 12 단위로 움직일 것을, 0, 32, 64, 96 단위로 움직이게 될 수 있음 -> 근처에 위치한 주소를 찾아야 하는 spatial locality가 깨짐
1. Cache size
- 1 block size: 4word = 4 * 2^2 byte = 2^4 byte
- cache data size 16KiB = 2^4 * 2^10 byte
- cache data에서 Block의 개수(Number of Blocks) = cache data size / 1 block size = 2^10
- cache는 2^10개의 block를 가지므로, index 비트 = 10
2. Tag size
- 4-word blocks -> block offset = 4 = 2^2, word offset = 4 = 2^2
- Tag size = 32 - (index 비트 + block offset + word offset) = 32 - ( 10 + 2 + 2 ) = 18
3. Total cache size
- Total cache size: block의 개수 * (block size + tag size + valid field size) = 2^10 * (2^4*2^3 + 18 + 1) = 2^10 * 147 = 147 KiBits -> 18.4 KiB
-> 캐시의 크기는 저장하고자하는 데이터 크기의 1.15배 정도
-> Larger block size에서 메모리가 캐시 데이터를 읽는 방법
-> 16개의 32bits짜리 각 word를 mux에 입력 + block offset의 형태에 따라
-> 16개의 input 중 하나를 골라 Data로 읽음
- cache의 총 block 개수: 64
- 1개의 block size: 16
- main memory의 주소: 1200
(Block address) modulo (Number of blocks in the cache)
1. Block address
- Block address: Byte address / Btyes per block = 1200 / 16 = 75
2. 75 modulo 64 = 11
- block address가 75가 나오는 1200 ~ 1215는 모두 같은 cache memory 위치에 저장될 것
Miss Rate vs. Block Size
- block size가 커질 수록 -> spatial locality에 의해 miss rates는 감소한다.
- 그러나, 일정 구간부터는 miss rates 증가 -> why? -> cache size가 고정이라는 것은 block size * Indexes가 서로 반비례 관계라는 것 -> block size가 커지면 Indexes가 감소 -> 다양한 block을 가져오지 못함
- cache size가 클 때는? -> 어차피 indexes가 반으로 줄어도, 원래 빈 공간이었을 확률 이 높음 -> 따라서 성능의 차이 X
- cache size가 커질 수록 -> index 개수가 많아짐 -> miss rates 감소
Handling Cache Misses
- PC에서 요청한 값을 memory에 요청
- 해당 값을 memory가 읽는 동안 기다림
- Writing -> cache entry의 일부로 data를 cache memory에 putting -> tag field -> valid bit on
- cache memory에 저장된 값을 cpu에 전달
Handling Writes
- sw를 수행했을 때, cache memory와 main memory 사이에 차이가 발생(inconsistent) -> cache memory의 바뀐 값을 memory로 옮겨야 한다.
1. Write-through
- cache memory에 sw하자마자(main memory와의 차이가 생기기 전에) -> main memory도 업데이트해주는 것
- main-cache 간의 consistent를 항상 유지한다는 장점
- 좋은 성능을 보이지 못한다.
2. Write-through - Use Write buffer
- cache memory에 sw가 적용되면, 해당 값을 write buffer로 전달 -> write buffer에 차곡차곡 쌓다가 일정 순간에 -> main memory로 업데이트
- write buffer가 가득 차고, processor가 wirte 해야하는 상황이면 -> write buffer가 empty 상태가 될 때까지 stall
Write-back
- block이 교체될 때 -> main memory로 입력
- Dirty bit: data가 modified인지 not modified인지 알려주는 indicator(1bit)
- 매번 업데이트되는 것이 아니라 -> 교체될 때만 main memory에 접근 -> 메모리 접근 효율을 향상시킴
'3학년 1학기 전공 > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조] Lecture 19: Memory Hierarchy - Part3 (0) | 2024.06.08 |
---|---|
[컴퓨터 구조] Lecture 18: Memory Hierarchy - Part2 (1) | 2024.06.07 |
[컴퓨터 구조] Lecture 16: The Processor - Part5 (0) | 2024.05.31 |
[컴퓨터 구조] Lecture 15: The Processor - Part4 (1) | 2024.05.30 |
[컴퓨터 구조] Lecture 14: The Processor - Part3 (0) | 2024.05.20 |