오늘 끝나면
빨라지려는 CPU
- ✓클럭만 올리는 것이 왜 한계(파워 월)인지 연도와 함께 한 줄로 설명한다
- ✓파이프라인이 5단계를 겹쳐 처리량(IPC)을 올리는 원리를 그림으로 그린다
- ✓캐시 히트율과 분기예측 적중률이 왜 속도를 좌우하는지 말한다
실습 미션
오른쪽 비교기에서 같은 명령 수를 순차와 파이프라인으로 돌려 IPC 차이를 확인하고, 캐시 히트율을 낮춰 파이프라인이 느려지는 것을 직접 본다.
성공 조건
- □순차와 파이프라인의 총 사이클과 IPC가 어떻게 다른지 봤다
- □파이프라인 차트에서 단계가 한 칸씩 겹치는 것을 확인했다
- □캐시 히트율을 낮춰 Mem 단계가 멈추고 IPC가 떨어지는 것을 봤다
클럭 · 파이프라인 · 캐시 · 분기예측
빨라지려는 CPU
같은 명령 루프를 더 빨리 돌리는 길이다. 박자만 올리는 게 아니라 단계를 겹치고, 데이터를 가까이 두고, 다음 명령을 미리 추측한다.
클럭만 올려선 벽에 막힌다
CPU는 클럭이라는 박자에 맞춰 한 명령씩 처리한다. 박자가 빠를수록 초당 더 많이 처리한다.
그래서 한동안은 클럭이 곧 성능이었다. 1971년 인텔 4004가 0.74MHz, 2000년 펜티엄4가 1.5GHz까지, 30년간 박자만 2천 배 올렸다.
2004년, 인텔이 4GHz 펜티엄을 끝내 취소했다. 클럭을 올릴수록 전력과 발열이 제곱으로 늘어 더는 식히지 못한다. 이 한계를 파워 월(power wall)이라 부른다.
그래서 박자 말고 다른 데서 속도를 짜내기 시작했다. 한 박자에 더 많은 일을 하게 만드는 쪽이다. 이것이 이 강의의 나머지 세 가지 길이다.
30년간 박자를 2천 배 올렸지만, 전력은 클럭의 제곱으로 늘어남. 2004년 인텔이 4GHz 펜티엄을 취소함 — 이때부터 박자 말고 다른 길을 팜.
파이프라인, 단계를 겹쳐 처리
명령 하나는 보통 5단계로 나뉜다. 가져오기(Fetch), 해독(Decode), 실행(Exec), 메모리(Mem), 쓰기(Write) 순이다.
순차로 하면 한 명령이 5단계를 다 끝내야 다음을 시작한다. 나머지 4개 회로는 노는 셈이다.
파이프라인은 빨래방처럼 단계를 한 칸씩 겹친다. 1번 빨래가 건조기로 넘어가면 2번 빨래가 바로 세탁기에 들어간다.
다 채워지면 한 사이클마다 명령 하나가 완성된다. 박자는 그대로인데 처리량(IPC)이 몇 배가 된다. 1989년 인텔 486이 처음으로 이것을 칩에 넣었다.
한 칸씩만 밀려 단계가 대각선으로 겹침. 채워진 뒤로는 매 사이클 명령 하나가 완성됨, 박자는 그대로인데 4배 가까이 빨라짐.
캐시, 자주 쓰는 데이터를 가까이
메모리(RAM)는 멀어서 느리다. 거기서 값 하나 가져오는 동안 파이프라인이 수십 사이클 멈춘다(stall).
캐시는 자주 쓰는 데이터를 CPU 바로 옆에 둔 작고 빠른 저장 공간이다. 옆에 있으면 몇 사이클 만에 꺼낸다.
찾는 값이 캐시에 있으면 히트이고, 없어서 멀리 RAM까지 가야 하면 미스다. 히트율이 높을수록 덜 멈춘다.
현실에서 효과가 큰 이유는 데이터에 규칙이 있기 때문이다. 방금 쓴 것을 또 쓰고, 옆 칸을 이어 쓴다. 그래서 미리 가까이 모아두면 대부분 히트가 된다.
파란 칸 = 지금 캐시에 올라와 있음
아직 안 읽음. 같은 칸을 두 번 눌러보셈, 두 번째는 HIT가 됨.
현실 데이터는 방금 쓴 걸 또 쓰는 규칙(지역성)이 있어, 가까이 모아두면 대부분 히트가 됨. 히트율이 오를수록 평균 지연이 뚝 떨어짐.
분기예측, 다음 명령을 미리 추측
분기(if 같은 갈림길)도 파이프라인의 적이다. 어디로 갈지 정해질 때까지 기다리면 뒤 칸이 빈다.
그래서 분기예측기가 다음에 갈 길을 미리 추측해 파이프라인을 채워 둔다. 멈추지 않고 계속 달린다.
맞으면 공짜로 빨라지고, 틀리면 잘못 채운 것을 비우고 다시 시작한다. 이 벌점이 보통 15~20사이클이다.
비결은 과거 기록이다. 같은 분기가 지난번에 어디로 갔는지 외워두면 다음도 그쪽일 확률이 크다. 요즘 칩은 분기의 95% 이상을 맞힌다.
아직 없음. 같은 결과를 두세 번 먹이면 예측기가 외워서 곧 맞히기 시작함.
패턴이 반복되면 예측기가 외워서 곧 100%에 가깝게 맞힘, 멈추지 않고 달림. 틀릴 때만 파이프라인을 비우는 +15사이클 벌점을 냄. 요즘 칩은 95% 이상 맞힘.
직접 파이프라인 돌려보기
오른쪽 비교기에서 같은 명령들을 순차와 파이프라인 방식으로 직접 돌려본다.
명령 수를 늘리고 실행 방식을 토글하면 타이밍 차트에서 단계가 한 칸씩 겹치고, 총 사이클과 IPC가 즉시 바뀐다.
캐시 히트율을 낮추면 Mem 단계가 멈추는(stall) 검은 칸이 끼고 파이프라인이 느려지는 것도 보인다.
여기서 본 네 가지, 클럭·파이프라인·캐시·분기예측이 한 칩 안에서 동시에 굴러 같은 명령 루프를 더 빨리 짜낸다.
파이프라인은 단계를 한 칸씩 겹침. 채워지면 한 사이클마다 명령 하나가 완성됨, IPC가 1에 가까워짐.