메모리 계층 구조

위와 같이 x 좌표만 합산하는 처리를, 구조체의 배열(각 성분을 별도의 배열로 만든 형태)로 바꾸면 빨라지기 쉬운 이유는 무엇입니까?

struct P { float x, y, z, mass; };
struct P p[N];
for (i = 0; i < N; i++)
    sx += p[i].x;
  1. A구조체의 배열인 채로는 컴파일러가 x만 읽어 내는 명령을 만들 수 없기 때문
  2. B별도의 배열로 하면 부동소수점 계산이 더 높은 정밀도가 되기 때문
  3. Cx만 연속해서 늘어서므로 읽어 온 라인에 불필요한 성분이 섞이지 않기 때문
정답과 해설 보기

정답: C. x만 연속해서 늘어서므로 읽어 온 라인에 불필요한 성분이 섞이지 않기 때문

구조체의 배열(AoS)에서는 x, y, z, mass 16바이트가 한 묶음으로 늘어서므로, x만 읽는 처리에서도 64바이트 라인의 4분의 3은 사용하지 않는 데이터가 됩니다. 각 성분을 별도의 배열(SoA)로 하면 x만 연속해서 늘어서므로 읽어 온 라인을 모두 사용할 수 있고, 메모리 통신량이 약 4분의 1이 됩니다. SIMD에 의한 벡터화도 쉬워집니다. AoS에서도 x를 읽는 명령은 만들 수 있으며, 배열의 형태를 바꿔도 계산의 정밀도는 변하지 않습니다.

  • A. AoS에서도 x를 읽는 명령은 문제없이 만들 수 있습니다.
  • B. 데이터의 배열 방식을 바꿔도 계산의 정밀도는 변하지 않습니다.
  • C. 올바릅니다. 필요한 x만 연속해서 늘어서므로 라인을 낭비 없이 사용할 수 있습니다.
이 분야 연습하기 분야로 돌아가기

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

  1. 캐시를 명령용(I 캐시)과 데이터용(D 캐시)으로 나눈 L1 캐시의 주된 이점은 무엇입니까?
  2. 페이지 크기 4 KB, 라인 크기 64바이트인 시스템에서 L1 캐시를 가상 인덱스·물리 태그(VIPT) 방식으로 하고, 인덱스와 오프셋을 페이지 내의 비트만으로 구성하고자 합니다. 8-way 세트 연관이라면 캐시 용량은 최대 얼마까지 할 수 있습니까?
  3. L1 캐시에 가상 인덱스·물리 태그(VIPT) 방식이 자주 사용되는 주된 이유는 무엇입니까?
  4. 캐시의 히트 시간이 2사이클, 미스율이 4%, 미스 페널티가 150사이클일 때, 평균 메모리 접근 시간은 몇 사이클입니까?
  5. 캐시가 이상적이라면 평균 CPI가 1.0인 프로세서에서, 명령 하나당 평균 1.3회의 메모리 접근이 있고 그 미스율이 2%, 미스 페널티가 100사이클일 때, 실제 평균 CPI는 얼마입니까?

이 분야의 비교