기록은 기억을 이기고 시간보다 오래 남는다.

Computer Science/컴퓨터 구조론

[C++] 캐시란 무엇일까? cash (예시 코드 포함)

준_준 2024. 5. 29. 14:45

 

안녕하세요 준준입니다.

오늘은 캐시에 대해서 알아보고 

코드를 이용해서 실제 캐시가 어떻게 작동하는지 알아가는 시간을 가지도록 하겠습니다.


  • 캐시란 무엇일까?

캐쉬는 저장된 데이터를 더욱 빠르게 접근하기 위해 cpu 안에 존재하는 메모리입니다.

CPU

CPU가 메인 메모리를 읽거나 쓰고자 할 때, 먼저 그 주소에 해당하는 데이터가 캐시에 존재하는지 살피고 데이터가 존재한다면 직접 캐시를 읽고 존재하지 않는다면 메인 메모리에 접근합니다.

 

이 경우 CPU는 메인 메모리에 직접 접근해서 전송된 데이터를 캐시에 복사해 넣음으로써 다음에 CPU가 더 빠르게 데이터를 찾을 수 있게 도와줍니다.

 

캐시는 임시 저장소라고 생각하시면 됩니다. 

 


  • 캐시가 필요한 이유

cpu는 매우 빠른 속도로 연산이 되는데 연산 속도보다 데이터를 가지고 오는 속도가 매우 느립니다.

따라서 이를 해결해기 위해 컴퓨터 설계자들은 캐시라는 것을 도입을 하였습니다.

 


  • 캐시의 철학
그럼 캐시는 어떠한 원칙에 따라서 메인 메모리에서 데이터를 가지고 올까요?

 

1) TEMPORAL LOCALITY

     -시간적으로 보면, 방금 주문한 테이블에서 추가 주문이 나올 확률이 높다.

     -방금 주문한 걸 메모해 놓으면 편하지 않을까?

 

2) SPATIAL LOCALITY

     -공간적으로 보면, 방금 주문한 사람 근처에 있는 사람이 추가 주문을 할 확률이 높다.

     -방금 주문한 사람과 합석하고 있는 사람들의 주문 목록도 메모해 놓으면 편하지 않을까?


  • 예시코드

아래에 코드는 캐시의 예시를 들어주는 코드입니다.

 

코드만 보시고 어떤 코드인지 이해해 보시고 코드 밑에 설명을 보시면 더욱 좋을 것 같습니다.

 

 

memset(buffer, 0, sizeof(buffer));
	{
		uint64 start = GetTickCount64();

		int64 sum = 0;
		for (int32 i = 0; i < 10000; i++)
			for (int32 j = 0; j < 10000; j++)
				sum += buffer[i][j];

		uint64 end = GetTickCount64();
		cout << "Elapsed Tick" << (end - start) << endl;
	}
	//첫번째 
	{
		uint64 start = GetTickCount64();

		int64 sum = 0;
		for (int32 i = 0; i < 10000; i++)
			for (int32 j = 0; j < 10000; j++)
				sum += buffer[j][i];

		uint64 end = GetTickCount64();
		cout << "Elapsed Tick" << (end - start) << endl;
	}

 

2차원 배열에 FOR문 2개를 이용하여 배열에 접근하여
배열을 탐색하는 시간을 출력합니다.

첫번째 괄호와 두번째 괄호의 차이점은
첫번 째 괄호는 BUFFER[I][J]
두번째 괄호는 BUFFER[J][I]
어떤 차이인지 보이시나요?

J와 I 순서가 다릅니다.
그럼 아래와 같은 배열이 있다고 하면
[][][][][][][][][][][][][][][][][][][][][][][][][]
[][][][][][][][][][][][][][][][][][][][][][][][][]
[][][][][][][][][][][][][][][][][][][][][][][][][]
[][][][][][][][][][][][][][][][][][][][][][][][][]
[][][][][][][][][][][][][][][][][][][][][][][][][]

첫번째 괄호는 한줄에 다 접근하면 다음에 접근하고
두번째 괄호는 첫번째줄 1번 두번째줄 1번 이렇게 접근합니다.

아까 캐시는 메인 메모리에서 데이터를 가지고 올때 공간적 시간적 원칙에 따라
주번 데이터에 접근할경우 시간을 단축 시킬 수 있습니다.

 

반응형