반응형

Cache

Computer Science에서 데이터나 값을 미리 복사 해놓은 임시 장소를 가르킵니다.

캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용합니다.

캐시에 데이터를 미리 복사해 놓으면 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근할 수 있습니다.

 

Cache 철학

Temporal locality : 최근에 접근했던 주소값을 다시 접근하는 경향

- 한번 사용한 주소의 메모리 영역을 자주 접하게 된다.

 

Spartial Locality : 최근 접근했던 주소값 근처의 주소들을 접근하는 경향

- 한번 사용했던 주소의 근처 영역은 접근이 이루어질 확률이 관계없는 곳보다 더 높다.

 

Test Code ( C++ )

#include <iostream>
#include <chrono>

using namespace std;

int a[10'000][10'000];
int main() {
	{
		std::chrono::system_clock::time_point start = std::chrono::system_clock::now();
		for (int i = 0;i < 10'000; ++i) {
			for (int j = 0;j < 10'000;++j) {
				a[i][j] = 1;
			}
		}
		std::chrono::duration<double>sec = std::chrono::system_clock::now() - start;
		std::cout << "걸린 시간 : " << sec.count() << "seconds" << endl;
	}
	{
		std::chrono::system_clock::time_point start = std::chrono::system_clock::now();
		for (int i = 0;i < 10'000; ++i) {
			for (int j = 0;j < 10'000;++j) {
				a[j][i] = 1;
			}
		}
		std::chrono::duration<double>sec = std::chrono::system_clock::now() - start;
		std::cout << "걸린 시간 : " << sec.count() << "seconds" << endl;
	}


	return 0;
}

결과

테스트를 하였을 때, 2차배열을 사용하여 접근하여 1을 쓰도록 하였습니다.

2개는 분명히 같은 동작을 하지만, 걸리는 시간을 차이가 나게 됩니다.

그 이유는 Spartial Locality 관점으로 근접한 공간적 메모리 영역을 접근하였기 때문에 좀더 빠르게 수행됩니다.

 

참고

https://programming119.tistory.com/84

 

[컴퓨터구조] Locality 란 / Locality 종류

Locality 란 Locality를 한국어로 직역하면 '지역성' 이라는 뜻이다. 프로그램적으로 생각해보자. 우리의 프로그램은 항상 메모리의 특정 주소를 찾아가서 데이터를 읽어오고 특정 주소로 찾아가서

programming119.tistory.com

https://ko.wikipedia.org/wiki/%EC%BA%90%EC%8B%9C

결론

코드를 최적화시킬 때, 같은 수행을 한다고 하더라도 어떤 방식으로 하느냐에 따라 최적화를 더 잘 할 수 있는지 알 수 있습니다.

현업에서 일하면서 어느 정도 코드를 짜는데 있어서는 익숙해지지만, 매번 코드를 짠 후에 어떻게 하면 더 최적화를 시킬 수 있을지, 어떻게 하면 더 코드를 가독성 있고 보기 편하게 할 수 있을지, 더 좋은 방법은 없는지 고민하게 됩니다.

대학생 때는 과연 이러한 CS 지식들이 어디에 필요할까 고민을 많이 했었는데, 직접 일을 하면서 최적화 작업에도 신경쓰다보니, 하나하나 필요한 부분들이 많구나를 느낍니다.

기본적으로 게임 내의 정보들을 서버에서는 데이터를 캐싱하여 많이 사용합니다. 

매번 데이터 테이블에 접근하거나 DB에 접근하여 가져오는데 걸리는 시간을 무시하지 못하기 때문이죠.

계속해서 공부하면서 여러 강의도 들어보고 책도 보다보니, 개발 공부의 끝이 없네요 ㅠ_ㅠ..

매일 매일이 쌓이고 쌓여 발전되기를..

 

반응형

'Etc > Computer Science' 카테고리의 다른 글

메모리 배리어 ( Memory Barrier )  (0) 2022.07.12

+ Recent posts