오늘 끝나면
지연·대역폭·지역성
- ✓지연·대역폭·지역성의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 지연이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
빠른 건 작다 — 시간·공간 지역성이 성능을 만든다 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
반도체 설계 · 24
지연·대역폭
·지역성
지연은 한 번 가져오는 데 걸리는 시간이다.
대역폭은 한 번에 옮기는 양이다.
방금 쓴 걸 또 쓰는 버릇이 캐시를 만든다.
지연 vs 대역폭, 다른 두 축
메모리 속도는 한 숫자가 아니다. 지연과 대역폭, 두 축으로 쪼개야 비로소 보인다.
지연(latency)은 요청하고 첫 데이터가 올 때까지 걸리는 시간이다.
대역폭(bandwidth)은 일단 흐르기 시작하면 초당 옮기는 양이다.
이 둘은 서로 다른 축이라 따로 논다.
수도로 비유하면 지연은 수도꼭지를 열고 첫 물이 나올 때까지의 텀이고, 대역폭은 관이 굵어 한꺼번에 쏟아지는 물의 양이다.
관이 굵어 대역폭이 커도 멀리 있으면 첫 물은 늦게 오니 지연은 길어진다.
그래서 빠르다를 말할 땐 어느 축인지부터 따져야 한다.
길수록 첫 응답이 늦다
굵을수록 한꺼번에 많이 옮긴다
빠른 건 작다, 메모리 계층
빠른 메모리로만 채우지 못하는 건 빠른 게 비싸고 작기 때문이다. 그래서 계층으로 쌓는다.
레지스터는 CPU 바로 옆에 있고 약 1사이클이다. 대신 수십 칸뿐이고, 우리 머신은 8개다.
캐시는 코어 안쪽에 있고 수 사이클이다. KB에서 MB로 작다.
RAM은 칩 바깥에 있고 수십에서 수백 사이클이다. 대신 GB로 크다.
위로 갈수록 빠르고 작고, 아래로 갈수록 느리고 크다.
물리적으로 가까울수록 빠르고, 가까운 자리는 좁아 많이 못 둔다. 이게 계층이 생기는 이유다.
자주 쓸 데이터를 위로 끌어올리는 게 설계의 핵심이 된다.
시간 지역성 · 공간 지역성
프로그램의 메모리 접근은 골고루 흩어지지 않는다. 한쪽에 뭉친다. 이 뭉침을 지역성이라 한다.
시간 지역성은 방금 쓴 데이터를 곧 또 쓰는 성질이다.
반복문의 카운터, 자주 부르는 함수가 그 예다. 같은 칸이 짧은 시간에 여러 번 불린다.
공간 지역성은 방금 쓴 칸의 바로 옆 칸도 곧 쓰는 성질이다.
배열을 처음부터 끝까지 훑을 때가 그 예다. 0번 다음 1번, 2번, 줄줄이 옆으로 간다.
접근이 시간과 공간으로 뭉치니, 한 번 가져온 걸 잠깐 곁에 두면 적중률이 확 오른다.
직접 돌려 시간을 비교한다
같은 프로그램을 세 저장소에서 돌려, 데이터 16칸을 24번 읽는 동안 누적 사이클을 비교한다.
지역성을 켜면 캐시 머신은 히트가 많아 RAM만 쓰는 머신을 크게 앞지른다.
무작위로 바꾸면 미스가 많아 캐시가 거의 무용해진다. 같은 하드웨어인데 접근 패턴만으로 갈린다.
STEP을 눌러 접근을 하나씩 진행한다. 히트와 미스가 막대에 쌓인다.
전체 평균 히트율 63% (이 패턴 끝까지). 캐시가 효과를 보는 전제는 지역성이다. 같거나 가까운 데이터를 또 쓸 때만 히트가 난다. 이 가정이 25강 캐시 구조와 최종 MyChip에 들어간다.
지역성이 캐시를 만든다
캐시는 지역성이라는 가정 위에 서 있는 도박이다.
접근이 뭉친다는 사실을 믿고, 방금 가져온 데이터를 잠깐 가까이 둔다.
지역성이 있으면 다음 접근이 그 근처라 캐시에서 바로 꺼내니 히트다.
무작위면 매번 캐시에 없어 RAM까지 가니 미스다.
그래서 캐시의 효과는 하드웨어가 아니라 프로그램의 접근 패턴이 결정한다.
지역성이 좋은 코드는 같은 칩에서 몇 배 빠르게 돈다. 캐시 친화적으로 짜는 게 곧 성능이다.
Q. 캐시가 효과를 보려면 프로그램에 무엇이 있어야 하나?
정답은 지역성이다. 같은 데이터를 또 쓰는 시간 지역성, 가까운 데이터를 잇따라 쓰는 공간 지역성을 말한다.캐시는 방금 가져온 데이터를 잠깐 곁에 두는 도박이라, 접근이 뭉쳐 있어야 다음 접근이 히트난다.
접근이 무작위로 흩어지면 매번 미스라 캐시가 있으나 마나다.
다음에 또 쓸 거라 믿고, 방금 가져온 데이터를 잠깐 가까이 둔다.
→ 캐시에 살아 있음 → 히트
→ 캐시에 없음 → 미스