메모리 계층 구조
위의 두 루프를 하나로 합치면(루프 융합, loop fusion) N이 클 때 빨라지기 쉬운 이유는 무엇입니까?
for (i = 0; i < N; i++) a[i] = b[i] * 2;
for (i = 0; i < N; i++) c[i] = a[i] + 1;
- A곱셈과 덧셈이 하나의 명령으로 합쳐져 계산량이 절반이 되기 때문
- Ba[i]를 쓴 직후에 사용할 수 있어 배열 a를 주기억장치에서 다시 읽지 않아도 되기 때문
- C루프 횟수가 N회에서 2N회로 늘어나 파이프라인이 채워지기 쉬워지기 때문
정답과 해설 보기
정답: B. a[i]를 쓴 직후에 사용할 수 있어 배열 a를 주기억장치에서 다시 읽지 않아도 되기 때문
별도의 루프인 채로는 첫 번째 루프에서 쓴 a 전체가 캐시에 다 들어가지 않을 만큼 크면, 두 번째 루프에서 처음부터 다시 읽을 때마다 미스가 일어납니다. 융합하면 a[i]를 쓴 직후 같은 반복 안에서 사용하므로 데이터가 캐시나 레지스터에 있는 동안 재사용할 수 있어 주기억장치와의 통신이 줄어듭니다. 계산량은 변하지 않으며, 루프 횟수는 2N회에서 N회로 줄어듭니다.
- A. 연산의 수는 변하지 않으며 계산량이 절반이 되지는 않습니다.
- B. 올바릅니다. 쓴 직후에 재사용할 수 있어 배열 a를 다시 읽을 필요가 없어집니다.
- C. 루프 횟수는 2N회에서 N회로 줄어듭니다.