캐쉬 장치의 동작 원리를 간단하게 살펴보자.

만약에 데이터가 업데이트 될 때 마다 메모리에 기록해야 한다면 처리속도가 매우 느릴 것이다.

따라서 컴퓨터는 CPU 코어에 캐쉬장치를 마련하여 정보를 어느정도 저장했다가 메모리에 기록하는 방식을 사용한다.

캐쉬에는 두 가지 철학이 있다. 이해하기 쉽게 레스토랑의 직원(쓰레드)의 관점에서 비유하자면,

1) Temporal Locality (시간적)

방금 주문한 테이블에서 추가 주문이 나올 확률이 높다. 방금 주문한 걸 메모해 놓자

2) Spacial Locality (공간적)

방금 주문한 사람 근처에 있는 사람이 추가 주문을 할 확률이 높다. 방금 주문한 사람과 합석하고 있는 사람들의 주문목록도 메모해두자.

이 중에서 Spacial Locality를 확인할 수 있는 코드를 살펴 보자.

class Program
    {

        // [][][][][] [][][][][] [][][][][] [][][][][] [][][][][]
        static void Main(string[] args)
        {

            int[,] arr = new int[10000, 10000];

            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(end-now);


            now = DateTime.Now.Ticks;
            for (int y = 0; y < 10000; y++)
            {
                for (int x = 0; x < 10000; x++)
                {
                    arr[x, y] = 1;
                }
            }
            end = DateTime.Now.Ticks;
            Console.WriteLine(end - now);


        }
    }

두 for문의 차이점을 확인했는가?

하나는, 2차원 배열에 순서대로(차례대로) 접근하는 방식이고

다른 하나는, 2차원 배열에 순서대로 접근하지 않고 건너 뛰면서 접근하는 방식이다.


메모리에 기록하는 시간을 출력하여 확인해 보았더니 차례대로 접근하는 방식이 더 빨리 메모리에 되었다.

이런 결과가 나오는 이유는 CPU가 접근한 데이터와 가까이 있는 데이터들을 캐쉬에 먼저 기록해 놓기 때문이다.

따라서 가까운 주소의 데이터에 접근할 때 캐쉬에 기록해 놓은 정보들을 한 꺼번에 메모리에 업데이트하여 빠른 속도로 작업을 할 수 있게 된다.

profile
POSTECH EE 18 / Living every minute of LIFE

0개의 댓글