메모리 계층 구조

한 번의 미스로 64바이트 라인을 읽고 주기억장치의 대기 시간이 100 ns일 때, 동시에 처리할 수 있는 미스가 하나뿐이면 읽기 대역폭은 약 0.64 GB/s에 그칩니다. 동시에 10개의 미스를 처리할 수 있다면 대역폭은 대략 얼마가 됩니까? (다른 제약은 없다고 가정합니다)

  1. A0.064 GB/s
  2. B0.64 GB/s
  3. C6.4 GB/s
정답과 해설 보기

정답: C. 6.4 GB/s

대역폭은 동시에 처리 중인 데이터양을 대기 시간으로 나누어 구할 수 있습니다(리틀의 법칙, Little's law). 미스가 하나라면 64 B ÷ 100 ns = 0.64 GB/s이고, 동시에 10개 처리할 수 있다면 10 × 64 B ÷ 100 ns = 6.4 GB/s가 됩니다. 주기억장치의 대역폭을 다 쓰려면 대기 시간을 줄이는 것만이 아니라 많은 미스를 동시에 처리하는 메모리 수준 병렬성(MLP, memory-level parallelism)이 필수적입니다. 0.64 GB/s는 동시에 하나인 경우의 값 그대로이며, 0.064 GB/s는 반대로 10으로 나눈 값입니다.

  • A. 0.064 GB/s는 10배가 아니라 10분의 1로 한 값입니다.
  • B. 0.64 GB/s는 동시에 하나만 처리할 수 있는 경우의 값입니다.
  • C. 올바릅니다. 10 × 64 B ÷ 100 ns = 6.4 GB/s입니다.
이 분야 연습하기 분야로 돌아가기

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

  1. 한 번 쓴 뒤 당분간 다시 읽지 않는 큰 데이터를 쓸 때, 캐시를 거치지 않는 스토어(논템포럴 스토어, non-temporal store)를 사용하는 주된 이점은 무엇입니까?
  2. 캐시의 히트율이 95%일 때, 미스율은 얼마입니까?
  3. 미스한 라인을 주기억장치에서 읽어 올 때, CPU가 필요로 하는 워드(word)를 먼저 보내고 나머지를 나중에 보내는 기법은 무엇입니까?
  4. 위의 두 루프를 하나로 합치면(루프 융합, loop fusion) N이 클 때 빨라지기 쉬운 이유는 무엇입니까?
  5. 큰 행렬을 전치(transpose)하는 처리(b[j][i] = a[i][j])에서 캐시 미스가 많아지기 쉬운 이유와 대표적인 대책의 조합으로 올바른 것은 무엇입니까?

이 분야의 비교