스킬캠퍼스
20 · 빨라지려는 CPU
강의

오늘 끝나면

빨라지려는 CPU

  • 클럭만 올리는 게 왜 한계(파워 월)인지 연도와 함께 한 줄로 설명함
  • 파이프라인이 5단계를 겹쳐 처리량(IPC)을 올리는 원리를 그림으로 그림
  • 캐시 히트율과 분기예측 적중률이 왜 속도를 좌우하는지 말함

실습 미션

오른쪽 비교기에서 같은 명령 수를 순차 vs 파이프라인으로 돌려 IPC 차이를 확인하고, 캐시 히트율을 낮춰 파이프라인이 느려지는 걸 직접 봄.

성공 조건

  • 순차와 파이프라인의 총 사이클·IPC가 어떻게 다른지 봤음
  • 파이프라인 차트에서 단계가 한 칸씩 겹치는 걸 확인했음
  • 캐시 히트율을 낮춰 Mem 단계가 멈추고 IPC가 떨어지는 걸 봤음

클럭 · 파이프라인 · 캐시 · 분기예측

빨라지려는 CPU

같은 명령 루프를 더 빨리 돌리는 길. 박자만 올리는 게 아니라 단계를 겹치고, 데이터를 가까이 두고, 다음 명령을 미리 추측함.

IntelAMDApple
P.0120 · 빨라지려는 CPU

클럭만 올려선 벽에 막힌다

CPU는 클럭이라는 박자에 맞춰 한 명령씩 처리함. 박자가 빠를수록 초당 더 많이 함.

그래서 한동안은 클럭이 곧 성능이었음. 1971년 인텔 4004가 0.74MHz, 2000년 펜티엄4가 1.5GHz까지 — 30년간 박자만 2천 배 올림.

2004년, 인텔이 4GHz 펜티엄을 끝내 취소함. 클럭을 올릴수록 전력과 발열이 제곱으로 늘어 더는 못 식힘 — 파워 월(power wall)이라 부름.

그래서 박자 말고 다른 데서 속도를 짜내기 시작함. 한 박자에 더 많은 일을 하게 만드는 쪽으로. 이게 이 강의 나머지 세 길임.

클럭의 역사 — 올라가다 발열 벽에 막힘
클럭의 역사 · 올라가다 벽에 막힘
클럭 주파수 (로그) — 1971 → 2014
POWER WALL2004 · ~4GHz400419712861982Pentium1993P42000막힘2004
같이 치솟는 발열·전력 — 식힐 수가 없어 멈춤
1971
1982
1993
2000
2004

30년간 박자를 2천 배 올렸지만, 전력은 클럭의 제곱으로 늘어남. 2004년 인텔이 4GHz 펜티엄을 취소함 — 이때부터 박자 말고 다른 길을 팜.

P.0220 · 빨라지려는 CPU

파이프라인 — 단계를 겹쳐 처리

명령 하나는 보통 5단계로 나뉨 — 가져오기(Fetch) · 해독(Decode) · 실행(Exec) · 메모리(Mem) · 쓰기(Write).

순차로 하면 한 명령이 5단계를 다 끝내야 다음을 시작함. 나머지 4개 회로는 노는 셈임.

파이프라인은 빨래방처럼 단계를 한 칸씩 겹침. 1번 빨래가 건조기로 넘어가면 2번 빨래가 바로 세탁기에 들어감.

다 채워지면 한 사이클마다 명령 하나가 완성됨. 박자는 그대로인데 처리량(IPC)이 몇 배가 됨. 1989년 인텔 486이 처음으로 이걸 칩에 넣음.

순차 vs 겹침 — 같은 5단계, 다른 처리량
파이프라인 · 단계를 겹치면 빨라짐
실행 방식
F=가져오기D=해독E=실행M=메모리W=쓰기
가로축 = 시간(사이클) · 같은 명령 4개
I1
F
D
E
M
W
I2
F
D
E
M
W
I3
F
D
E
M
W
I4
F
D
E
M
W
총 사이클
8
명령당 평균
2.00

한 칸씩만 밀려 단계가 대각선으로 겹침. 채워진 뒤로는 매 사이클 명령 하나가 완성됨 — 박자는 그대로인데 4배 가까이 빨라짐.

P.0320 · 빨라지려는 CPU

캐시 — 자주 쓰는 데이터를 가까이

메모리(RAM)는 멀어서 느림. 거기서 값 하나 가져오는 동안 파이프라인이 수십 사이클 멈춤(stall).

캐시는 자주 쓰는 데이터를 CPU 바로 옆에 둔 작고 빠른 저장임. 옆에 있으면 몇 사이클 만에 꺼냄.

찾는 값이 캐시에 있으면 히트, 없어서 멀리 RAM까지 가야 하면 미스. 히트율이 높을수록 안 멈춤.

현실에서 효과가 큰 건 데이터에 규칙이 있어서임 — 방금 쓴 걸 또 쓰고, 옆 칸을 이어 씀. 그래서 미리 가까이 모아두면 대부분 히트가 됨.

캐시 히트(가까이) vs 미스(멀리 RAM까지)
캐시 · 가까이 있으면 빠름
메모리(RAM) — 멀다 · 칸을 눌러 값을 읽으셈

파란 칸 = 지금 캐시에 올라와 있음

캐시(CPU 옆) — 4칸 · 최근 쓴 게 앞으로
·
·
·
·

아직 안 읽음. 같은 칸을 두 번 눌러보셈 — 두 번째는 HIT가 됨.

접근
0
히트율
평균 지연

현실 데이터는 방금 쓴 걸 또 쓰는 규칙(지역성)이 있어, 가까이 모아두면 대부분 히트가 됨. 히트율이 오를수록 평균 지연이 뚝 떨어짐.

P.0420 · 빨라지려는 CPU

분기예측 — 다음 명령을 미리 추측

분기(if 같은 갈림길)도 파이프라인의 적임. 어디로 갈지 정해질 때까지 기다리면 뒤 칸이 빔.

그래서 분기예측기가 다음에 갈 길을 미리 추측해 파이프라인을 채워 둠. 멈추지 않고 계속 달림.

맞으면 공짜로 빨라지고, 틀리면 잘못 채운 걸 비우고 다시 — 이 벌점이 보통 15~20사이클임.

비결은 과거 기록임. 같은 분기가 지난번에 어디로 갔는지 외워두면 다음도 그쪽일 확률이 큼. 요즘 칩은 분기의 95% 이상을 맞힘.

분기예측 — 과거 기록으로 다음을 맞히기
분기예측 · 다음 길을 미리 추측
예측기의 다음 추측 — 지난번 간 길을 외움
if (조건)
→ 감 (taken)
실제로 어디로 갔나?
기록 — 맞힘(공짜) · ✕ 틀림(+15사이클)

아직 없음. 같은 결과를 두세 번 먹이면 예측기가 외워서 곧 맞히기 시작함.

분기
0
적중률
버린 사이클
0

패턴이 반복되면 예측기가 외워서 곧 100%에 가깝게 맞힘 — 멈추지 않고 달림. 틀릴 때만 파이프라인을 비우는 +15사이클 벌점을 냄. 요즘 칩은 95% 이상 맞힘.

P.0520 · 빨라지려는 CPU

직접 파이프라인 돌려보기

오른쪽 비교기에서 같은 명령들을 순차 vs 파이프라인으로 직접 돌려볼 것.

명령 수를 늘리고 실행 방식을 토글하면 타이밍 차트에서 단계가 한 칸씩 겹치고, 총 사이클·IPC가 즉시 바뀜.

캐시 히트율을 낮추면 Mem 단계가 멈추는(stall) 검은 칸이 끼고 파이프라인이 느려지는 것도 보임.

여기서 본 네 가지 — 클럭·파이프라인·캐시·분기예측이 한 칩 안에서 동시에 굴러 같은 명령 루프를 더 빨리 짜냄.

명령 수·실행 방식·캐시를 바꿔 IPC 비교 · 만져보기
파이프라인 · 같은 명령을 더 빨리 짜내기
명령 수4
실행 방식
캐시
사이클별 단계 진행 — 가로축이 시간(사이클)
I1
F
D
E
M
W
I2
F
D
E
M
W
I3
F
D
E
M
W
I4
F
D
E
M
W
F=FetchD=DecodeE=ExecM=MemW=Write
처리량 — 같은 일을 몇 사이클에
총 사이클
8
명령
4
IPC
0.50

파이프라인은 단계를 한 칸씩 겹침. 채워지면 한 사이클마다 명령 하나가 완성됨 — IPC가 1에 가까워짐.

3줄 요약

  1. 1클럭만 올리면 전력·발열 벽(파워 월)에 막힘 — 박자 말고 다른 데서 속도를 짜냄.
  2. 2파이프라인은 명령 5단계를 겹쳐 매 사이클 하나씩 완성하게 만듦.
  3. 3캐시로 데이터를 가까이 두고 분기예측으로 다음 명령을 미리 채워 멈춤을 줄임.

완료 전 점검

복습 카드

클럭

회로가 한 박자씩 명령을 받아들이는 박자(주파수)

파이프라인

명령의 여러 단계를 한 칸씩 겹쳐 동시에 진행하는 방식

캐시

자주 쓰는 데이터를 CPU 바로 옆에 둔 작고 빠른 저장