컴퓨터 구조 · 메모리 계층 · 퀴즈
퀴즈: 메모리 계층
문항 7개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
캐시가 데이터를 한 바이트가 아니라 64바이트 라인 단위로 가져오는 주된 이유는?
- 공간 지역성 때문에 인접 주소가 곧 쓰일 가능성이 높기 때문
- DRAM 이 64바이트 미만은 읽을 수 없기 때문
- 캐시 태그를 저장할 공간을 아끼기 위해서만
- 64바이트가 CPU 레지스터의 폭이기 때문
행 우선으로 저장된 2차원 배열을 열 방향으로 순회하면 왜 느려지는가?
- 곱셈과 나눗셈이 늘어나서
- TLB 가 열 방향 접근을 지원하지 않기 때문
- 매 접근마다 새 캐시 라인을 가져오고 그중 일부만 쓰고 버리기 때문
- 컴파일러가 열 방향 접근을 최적화하지 않기 때문
작업 집합이 L3 캐시보다 조금 큰 상태에서 발생하는 미스를 무엇이라 하며, 가장 적절한 대응은?
- 용량 미스 — 타일링처럼 작업 집합을 잘라 재사용을 늘린다
- 강제 미스 — 프리페치를 켠다
- 충돌 미스 — 배열의 보폭을 바꾼다
- 일관성 미스 — 스레드 수를 줄인다
산술 강도(arithmetic intensity)가 낮은 워크로드에서 성능을 올리는 방법으로 가장 효과가 없는 것은?
- 메모리 대역폭이 더 높은 장비로 옮긴다
- 양자화로 읽어야 할 바이트 수를 줄인다
- 연산 성능(peak FLOPS)이 더 높은 칩으로 교체한다
- 온칩 메모리를 활용해 한 번 읽은 데이터의 재사용을 늘린다
스레드마다 자기 슬롯에만 쓰는 8바이트 카운터 배열이 있다. 락이 전혀 없는데도 스레드를 늘릴수록 처리량이 떨어진다. 가장 유력한 원인은?
- 거짓 공유 — 여러 슬롯이 한 캐시 라인에 들어가 소유권을 주고받고 있다
- 컨텍스트 스위치 비용이 선형으로 증가했다
- 카운터가 원자 연산을 쓰지 않아 값이 깨졌다
- 메모리 할당자가 잠금을 사용한다
원자 연산의 피연산자가 두 캐시 라인에 걸쳐 있을 때 벌어지는 일로 옳은 것은?
- 연산이 실패하고 예외가 발생한다
- 캐시 일관성 프로토콜 대신 외부 버스 잠금이 걸려 수백 사이클이 들고 다른 코어도 영향을 받는다
- 컴파일러가 자동으로 두 개의 원자 연산으로 쪼갠다
- 성능은 같고 정확성만 보장되지 않는다
메모리 계층에서 '용량'과 '대역폭'을 구분해야 하는 이유로 가장 적절한 설명은?
- 용량이 크면 대역폭도 비례해서 커지기 때문
- 대역폭은 하드웨어 스펙이고 용량은 소프트웨어 설정이기 때문
- 둘은 사실상 같은 지표를 다르게 부르는 것이기 때문
- 용량은 모델이 올라가느냐를, 대역폭은 얼마나 빨리 처리되느냐를 결정하는 서로 다른 질문이기 때문