[컴퓨터 구조] 메모리 계층 구조

November 17, 2023


메모리 계층 구조

Processor-Memory-Performance-GapHen96

Processor의 성능 개선 속도와 DRAM의 성능 개선 속도의 차이는 점점 더 커졌습니다.

성능 측정 지표

  • Latency: 한 word에 접근하는데 걸리는 시간
    • Access time : 요청을 읽는 데 걸리는 시간
    • Cycle time : 한 사이클을 완료하는 데 걸리는 시간
  • Bandwidth: How much data can be supplied per time unit

Hit time(캐시에 접근해서 데이터를 레지스토로 불러들이는 시간)보다 Miss Penalty(메모리에서 데이터를 액세스해서 가져오는데 걸리는 시간)가 매우 큼

용어 정리

Locality

종류 설명
Temporal locality 최근에 접근된 항목 중 다시 접근될 가능성이 높은 item i++ in loop
Spatial locality 최근에 접근된 항목 주변의 항목들 array data

Block (or line)

  • Block(또는 line)은 캐시에 존재하거나 존재하지 않는 최소 정보 단위입니다.

Hit Rate

Hit Rate은 메모리 계층의 특정 수준에서 찾은 메모리 액세스의 적중률을 나타냅니다.

  • Hit Time: 해당 수준에서 데이터에 액세스하는 데 걸리는 시간

    → hit / miss 판별 시간 + 블록에 액세스하는 데 걸리는 시간

Miss Rate

메모리 계층의 특정 수준에서 찾지 못한 메모리 액세스의 분수, 1 - (Hit Rate)로 계산

  • Miss Penalty: 찾지 못한 블록을 낮은 수준에서 찾아 가져와, 해당 블록으로 교체하는 데 걸리는 시간
    • 낮은 수준에서 블록에 액세스하는 데 걸리는 시간
    • 해당 수준으로 해당 블록을 전송하는 데 걸리는 시간
    • 해당 수준에 블록을 삽입하는 데 걸리는 시간
    • 블록을 요청자에게 전달하는 데 걸리는 시간

memory hierarchy

관리 주체

Hierarchy Manager
registers ↔ cache complier와 CPU
cache ↔ main memory cache controller hardware
main memory ↔ disks operating system, TLB, hardware

캐시 매핑 방법

Direct mapped cache

Multiword block을 사용하면 spatial locality에서 이점을 얻을 수 있습니다.

Block이 너무 크면, 2가지 오류 발생 가능

  1. miss penalty가 증가할 수 있음

    → miss 발생시, 메모리에서 가져오는데 걸리는 시간이 증가

  2. 쓸모 없는 데이터도 같이 캐시로 올리기 때문에 캐시 pollution 발생 가능

Cache field sizes

하나의 캐시 내부에는 datatags 비트로 이루어져 있습니다.

  • Direct mapped cache

direct mapped cache

캐시의 크기가 1K word들로 이루어져 있고, 1개의 word가 한 block으로 사용된다면, 총 cache block의 개수는 1,024개입니다. 그리고 block과 word를 구분할 필요가 없으므로 block offset이 필요하지 않습니다.
그리고, 하나의 block에 하나의 word만 들어갈 수 있어서 Temporal 지역성에서만 이점을 얻을 수 있습니다. 즉, spatial 지역성은 없습니다.


  • Multiword block direct mapped cache

direct mapped cache 16kb

캐시의 크기인 1K words에서 16bytes line을 나누면, 총 cache block의 개수는 256입니다.
4개의 word가 한 block으로 사용된다면, block offset은 4개를 구분하기 위해 2 bits가 필요합니다. 이 경우, multiplexer가 더 필요하기 때문에 위의 경우보다 더 느려집니다.

32-bits 주소에서 direct mapped cache는 2n개의 블럭으로 이루어져 있으므로 n개의 비트가 인덱스로 사용됩니다.

예를 들어, block의 크기가 2m words라면, m bits는 block내의 word 주소를 의미합니다. 그리고 2 bits는 word내의 byte 주소를 가리키기 위해 사용합니다.

  • Block offset: block내의 word 주소(m bits)
  • Byte offset: word내의 byte 주소(2 bits)

캐시 메모리의 Write 정책

  • Hit시 write through와 write back으로 구분
  • Miss시, write allocate와 write no allocate로 구분

Hit

Write-Through vs. Write-Back

Write-Through

  • cache에 데이터가 write되는 즉시, 해당 데이터를 main memory에도 write하는 정책

  • 데이터를 cache에 쓰고 동시에 main memory에도 업데이트함으로써 일관성을 유지하는 방식

  • 쓰기 연산이 2번 필요하므로 속도가 느림

    → 대신, cache와 memory 사이에 write-buffer을 두어 느린 속도를 보완

  • 구현하기 간단

Write-Back

  • cache에 쓴 위치만 업데이트, 속도가 빠름
  • 처음에는 데이터를 cache에만 기록, 캐시 메모리가 새로운 데이터 블록으로 대체될 때 (다른 Tag를 가진 데이터가 캐시 블록에 할당될 때) memory에도 데이터를 저장하는 정책
  • dirty bit를 사용해서, 변경된 entry만 다음 계층에 쓰기

Miss

write-allocate

allocate

  • Write to a buffer, then to the cache
  • Cache miss시, buffer와 cache에 모두 쓰기
  • 캐시에 데이터를 쓸 때, 업데이트한 해당 tag와 data를 word에 쓰는 방식
  • Read는 항상 read-allocate. read-miss가 나면, cache에 올리고 메모리에도 올려야 함

no-write-allocate

no-allocate

  • Cache miss시, 메모리에서 가져온 데이터를 write buffer에만 쓰고 cache에는 쓰지 않음
  • cache write를 생략하고 write buffer에만 쓰는 방식. 즉, miss난 데이터를 cache에 쓰지 않고 메모리에만 write
  • 접근 방식에서는 Read Miss시에만 데이터가 캐시에 로드

참고

Processor-Memory-Performance-Gap

write-allocate vs. write-no-allocate 이미지


Profile picture

이재원

이해하기 쉬운 코드를 작성하려 고민합니다.


© 2024 Won's blog Built with Gatsby