메모리 계층 구조
위의 루프에서 int가 4바이트, 캐시 라인이 64바이트이고, 배열은 캐시에 들어 있지 않으며 시작이 라인 경계에 정렬되어 있을 때, 프리페치가 없다면 배열 읽기의 미스율은 얼마입니까?
int a[1024];
for (i = 0; i < 1024; i++)
sum += a[i];
- A12.5%
- B6.25%
- 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%가 되는 것은 라인마다 한 요소만 사용하는 띄엄띄엄한 접근입니다.