메모리 계층 구조

위의 루프에서 int가 4바이트, 캐시 라인이 64바이트이고, 배열은 캐시에 들어 있지 않으며 시작이 라인 경계에 정렬되어 있을 때, 프리페치가 없다면 배열 읽기의 미스율은 얼마입니까?

int a[1024];
for (i = 0; i < 1024; i++)
    sum += a[i];
  1. A12.5%
  2. B6.25%
  3. C100%
정답과 해설 보기

정답: B. 6.25%

64바이트 라인에는 64 ÷ 4 = 16개의 int가 들어갑니다. 차례로 읽으면 각 라인의 첫 번째 요소에서 1회 미스하고 나머지 15개는 히트하므로 미스율은 1 ÷ 16 = 6.25%입니다. 1024개라면 1024 ÷ 16 = 64회의 미스가 됩니다. 12.5%는 한 라인에 8개밖에 들어가지 않는다고 잘못 본 경우의 값입니다. 100%가 되는 것은 16개 간격(64바이트 간격)으로 읽어서 라인마다 한 요소만 사용하는 접근일 때입니다.

  • A. 12.5%는 한 라인에 8개의 요소가 들어간다고 잘못 본 경우의 값입니다.
  • B. 올바릅니다. 16개 요소마다 1회 미스하므로 1/16 = 6.25%입니다.
  • C. 100%가 되는 것은 라인마다 한 요소만 사용하는 띄엄띄엄한 접근입니다.
이 분야 연습하기 분야로 돌아가기

메모리 계층 구조의 다른 문제

  1. 행렬 곱셈 등에서 사용되는 루프 블로킹(타일링, tiling)의 주된 목적은 무엇입니까?
  2. 위와 같이 x 좌표만 합산하는 처리를, 구조체의 배열(각 성분을 별도의 배열로 만든 형태)로 바꾸면 빨라지기 쉬운 이유는 무엇입니까?
  3. 캐시를 명령용(I 캐시)과 데이터용(D 캐시)으로 나눈 L1 캐시의 주된 이점은 무엇입니까?
  4. 페이지 크기 4 KB, 라인 크기 64바이트인 시스템에서 L1 캐시를 가상 인덱스·물리 태그(VIPT) 방식으로 하고, 인덱스와 오프셋을 페이지 내의 비트만으로 구성하고자 합니다. 8-way 세트 연관이라면 캐시 용량은 최대 얼마까지 할 수 있습니까?
  5. L1 캐시에 가상 인덱스·물리 태그(VIPT) 방식이 자주 사용되는 주된 이유는 무엇입니까?

이 분야의 비교