(Cs with python)-메모리(메모리 계층, 지역성, 캐시히트)

컴퓨터사이언스 부트캠프 with 파이썬 책을 공부하며 정리한 포스팅입니다.

개인 공부후 정리용으로 남기는 포스팅으로 내용상에 오류가 있을수 있습니다.

예제 코드는 Computer-Science 를 통해 실습하고 있습니다.


핵심개념

  • 메모리 계층구조(memory hierarchy)
  • 지역성(locality)
  • 캐시히트(cache hit)

메모리 계층

메모리계층구조

  • 메모리의 종류가 다양한 이유는 속도와 비용.
  • 이러한 이유로 적정한 가격과 하드웨어 구현 등 여러가지 요소를 종합하여 위와 같은 메모리 계층 구조(memory hierarchy)가 완성됨.
    • 위로 올라갈수록 속도는 빨라지지만 용량은 작아짐
    • 반대로, 아래로 내려올수록 속도는 느려지지만 용량은 커짐
  • 전달되는 데이터가 아래쪽에 있을 경우 CPU에 도달하려면 위에 있는 모든 계층을 거쳐야 한다는 특징이 있다.
  • 위에 있는 계층을 모두 거칠 경우 속도가 느릴것 같지만 지역성(locality)때문에 실제로는 느려지지 않는다.
  • 오늘날의 캐시는 CPU 안에 들어 있고 L1, L2, L3 캐시 등이 있다.
    • 숫자가 작을수록 속도는 빠르고 용량은 작음

지역성(Principal of locality)

  • 데이터 접근이 같은 메모리 공간이나 인접한 메모리 공간에서 자주 일어난다는 의미
  • 시간적 지역성(temporal locality)
    • 특정 데이터에 한 번 접근했을 때 곧 다시 그 데이터에 접근할 가능성이 높다
  • 공간적 지역성(spatial region)
    • 이번에 접근할 데이터는 이전에 접근했던 데이터의 근처에 있을 확률이 높다

지역성 코드예시

>>> li = [1, 2, 3, 4, 5]
>>> res = 0
	# e는 공간적 지역성
>>> for e in li:
    	# res는 시간적 지역성
        res += e
  • res 변수는 리스트의 모든 요소를 가져와 더할 때마다 데이터에 접근한다
    • 시간적 지역성
  • for 문의 e는 리스트를 순회하면서 매번 바로 옆의 데이터를 가져온다
    • 공간적 지역성

캐시 히트(Cache hit)

  • CPU가 요청한 데이터를 메인 메모리에서 가져오지 않고 캐시에서 가져오는 것
    • 캐시에 없어서 메인 메모리에서 가져와야 하면 캐시 미스(cache miss)
  • 캐시 히트나 캐시 미스가 가능한 이유
    • CPU가 데이터를 요청하면 그 데이터와 함께 인접 데이터로 이루어진 메모리 블록을 캐시로 가져옴
    • 요청 데이터 + 인접 데이터로 이루어진 메모리 블록 => 캐시 행(cache line)
    • 그 다음, 캐시에서 해당 데이터만 레지스터로 전송
    • 그 다음 CPU가 데이터를 요청하면 우선적으로 캐시에 요청한 데이터가 있는지 확인

Reference

위키백과-메모리 계층 구조

Comments