스킬캠퍼스

오늘 끝나면

빨라지려는 CPU

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

실습 미션

오른쪽 비교기에서 같은 명령 수를 순차와 파이프라인으로 돌려 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

직접 파이프라인 돌려보기

오른쪽 비교기에서 같은 명령들을 순차와 파이프라인 방식으로 직접 돌려본다.

명령 수를 늘리고 실행 방식을 토글하면 타이밍 차트에서 단계가 한 칸씩 겹치고, 총 사이클과 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 바로 옆에 둔 작고 빠른 저장