디지털·가전제품
헤라아레스
컴퓨터 아키텍처에서 캐시 메모리(L1,L2,L3)
안녕하세요!
컴퓨터 아키텍처에서 캐시 메모리(L1,L2,L3) 의 지역성 원리가 CPU 연산 속도를 높이는 방식은 무엇인가요?
1개의 답변이 있어요!
캐시는 시피유를 빠르게 만드는 부품이 아니라 시피유가 기다리는 시간을 없애는 장치입니다. 이 차이가 중요해요. 시피유가 계산 한 번 하는 시간을 일 초라고 치면 램에서 데이터를 가져오는 건 몇 분이 걸리는 셈입니다. 그러니 캐시가 없으면 아무리 빠른 시피유도 대부분의 시간을 멍하니 기다리며 보냅니다.
그런데 미리 가져다 놓으려면 무엇을 가져올지 알아야 하잖아요. 앞으로 어떤 데이터를 쓸지 어떻게 아느냐, 여기서 지역성이라는 개념이 나옵니다. 프로그램이 메모리를 쓰는 방식에 아주 뚜렷한 버릇이 있다는 관찰이에요. 그 버릇이 두 가지입니다.
하나는 시간 지역성입니다. 방금 쓴 데이터는 곧 또 쓴다는 거예요. 반복문을 도는 동안 계속 참조되는 변수를 떠올리시면 됩니다. 그래서 캐시는 한 번 가져온 데이터를 바로 버리지 않고 붙들고 있습니다.
다른 하나는 공간 지역성인데 이게 더 재미있습니다. 방금 쓴 것 바로 옆을 곧 쓴다는 거예요. 배열을 처음부터 끝까지 훑는 코드가 대표적이죠. 그래서 캐시는 시피유가 요청한 사 바이트만 가져오는 게 아니라 그 주변을 통째로, 보통 육십사 바이트씩 끌어옵니다. 다음 요청이 그 안에 들어 있을 확률이 높다고 보는 거죠.
엘원 엘투 엘삼으로 나눈 이유는 간단합니다. 메모리는 용량이 커지면 반드시 느려지거든요. 그래서 아주 작고 아주 빠른 걸 코어 바로 옆에 붙이고, 조금 크고 조금 느린 걸 그다음에, 크고 느린 걸 모든 코어가 나눠 쓰게 둡니다. 찾을 때는 엘원부터 뒤지고 없으면 엘투, 엘삼, 마지막에 램으로 갑니다. 걸리는 시간이 대략 몇 사이클, 십여 사이클, 수십 사이클, 그리고 램은 수백 사이클이라 앞에서 찾을수록 이득이 큽니다.
실제로 코드를 짜실 때 이게 체감됩니다. 이차원 배열을 가로로 훑는 것과 세로로 훑는 것은 계산량이 똑같은데 속도는 몇 배씩 차이가 나요. 가로 방향은 메모리에 나란히 붙어 있는 순서라 한 번 끌어온 육십사 바이트를 알뜰하게 다 쓰고, 세로 방향은 매번 멀리 떨어진 곳을 건드리면서 방금 가져온 걸 버리게 되거든요. 알고리즘이 같아도 지역성을 아느냐 모르느냐가 여기서 갈립니다.
채택된 답변