🙇‍♀️캐시이론

식당에서 직원이 주문을 받자마자 주문 현황판에 기입하는 것보다 최대한 주문을 많이 받고 주문 현황판에 기입하는 것이 효율적이다. 직원이 주문 현황판에 적지 않은 기억이 바로 캐시이다

  • 캐시의 문제점
  • A직원이 2번 테이블에서 콜라를 주문을 받았다
  • 2번 테이블에서 B에게 콜라를 취소하고 사이다로 교체를 요구했다
  • B는 콜라의 주문을 받지 않았기에 혼선이 발생한다

쓰레드마다 각각의 코어로 실행되고 있고 코어마다 자신만의 캐시가 따로 있으므로 발생하는 문제!!

🪐cpu와 코어

  • cpu에서는 여러 코어가 있다
  • 코어에는 ALU와 캐시 장치가 있다
    • ALU
      • 연산기능을 하는 장치
    • 캐시장치
      • 레지스터, L1 캐시, L2 캐시가 있다
      • 레지스터는 단기기억
      • L1 캐시는 미니 수첩
      • L2 캐시는 대형 수첩
  • 코어에서 RAM(메인 메모리)로 캐시에 담긴 정보를 보낸다
    • RAM은 주문 현황판

🪐Temporal Locality, Spacial Locality

  • Temporal Locality
    • 시간적으로 보면, 방금 주문한 테이블에서 추가 주문이 나올 확률이 높다.
    • 방금 주문한걸 메모해 놓으면 편하지 않을까?
  • Spacial Locality
    • 공간적으로 보면, 방금 주문한 사람 근처에서 있는 사람이 추가 주문을 할 확률이 높다.
    • 방금 주문한 사람과 합석하고 있는 사람들의 주문 목록도 메모해 놓으면 편하지 않을까?
int[,] arr = new int[10000, 10000];

{
    // 5 * 5 배열
    // [1][2][3][4][5] [][][][][] [][][][][] [][][][][] [][][][][]
    // 공간적으로 캐시힛 상황
    // 캐시의 이점을 살려 캐시 메모리에 바로 넣어짐
    // 빠르다
    long now = DateTime.Now.Ticks;
    for (int y = 0; y < 10000; y++)
        for (int x = 0; x < 10000; x++)
            arr[y, x] = 1;
    long end = DateTime.Now.Ticks;
    Console.WriteLine($"(y, x) 순서 걸린 시간{end - now}");
}

{
    // 5 * 5 배열
    // [1][][][][] [2][][][][] [3][][][][] [4][][][][] [5][][][][]
    // 캐시의 이점을 살리지 못함
    // 데이터를 채울때마다 램으로 가야됨
    // 느리다
    long now = DateTime.Now.Ticks;
    for (int y = 0; y < 10000; y++)
        for (int x = 0; x < 10000; x++)
            arr[x, y] = 1;
    long end = DateTime.Now.Ticks;
    Console.WriteLine($"(y, x) 순서 걸린 시간{end - now}");
}

태그:

카테고리:

업데이트: