스킬캠퍼스

오늘 끝나면

SIMD와 벡터 ALU

  • SIMD와 벡터 ALU의 핵심 문제를 한 문장으로 설명한다
  • 오른쪽 실습에서 SIMD와이 어떻게 움직이는지 관찰한다
  • 다음 강의와 이어지는 한계를 말할 수 있다

실습 미션

한 명령으로 여러 lane — mask·reduction·speedup 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.

성공 조건

  • 실습의 기본값을 먼저 관찰
  • 입력값이나 모드를 한 번 이상 바꿔 결과 비교
  • 왜 결과가 바뀌었는지 한 문장으로 설명

반도체 설계 · 28

SIMD와
벡터 ALU

scalar는 데이터를 하나씩 처리한다.
SIMD는 한 명령으로 여러 칸을 동시에 처리한다.
데이터가 많을수록 더 빨라진다. GPU가 여기서 출발한다.

P.01반도체 설계 · 28

scalar, 한 명령에 한 칸

지금까지 만든 ALU는 한 번에 숫자 하나를 다룬다. 한 명령에 한 칸을 처리하는 방식이 scalar다.

데이터 16칸에 각각 10을 더하려면 같은 ‘더하기’ 명령을 16번 발행해야 한다.
칸을 읽고 더하고 쓴 다음 다음 칸으로 넘어간다. 칸 수만큼 명령 횟수가 그대로 늘어난다.

명령은 다 똑같은데 데이터만 바뀐다. 똑같은 일을 16번 반복하는 동안 명령을 꺼내 해석하는 비용도 16번 든다.
데이터가 100만 칸이면 scalar로는 100만 번이다.

명령 하나가 데이터 한 칸을 처리
scalar, 한 명령에 한 칸
명령 1+100 = 313
명령 2+101 = 111
명령 3+102 = 414
명령 4+103 = 111
명령 5+104 = 515
명령 6+105 = 919

명령은 다 똑같은데 칸만 바뀐다 · 16칸이면 16번

칸 수가 곧 명령 횟수다 · 데이터가 많을수록 그대로 늘어난다
P.02반도체 설계 · 28

SIMD, 한 명령, 여러 lane 동시에

SIMD는 Single Instruction Multiple Data다. 명령은 하나, 데이터는 여러 개다.

ALU를 여러 벌 나란히 깐다. 이 한 벌 한 벌을 lane이라 부른다.
한 명령을 발행하면 모든 lane이 같은 연산을 자기 칸에 동시에 적용한다.
lane이 4개면 한 명령으로 4칸을 한꺼번에 더한다.

16칸을 4 lane으로 처리하면 명령은 16번이 아니라 4번이다.
명령을 꺼내 해석하는 비용도 4번으로 줄어든다. 같은 일을 4분의 1 횟수로 끝낸다.
이 lane 수가 곧 칩이 한 박자에 처리하는 데이터 폭이다.

명령 하나가 여러 칸을 한꺼번에
SIMD, 한 명령, 4 lane 동시에
+10명령 1개
L0313
L1111
L2414
L3111

명령 1번에 4칸을 동시 처리한다 · 16칸이면 4번이면 끝

lane 수가 곧 한 명령이 처리하는 데이터 폭이다
P.03반도체 설계 · 28

mask와 reduction

모든 lane을 늘 다 쓰진 않는다. 일부만 켜거나 흩어진 결과를 하나로 모아야 할 때가 있다.

mask는 lane별 on/off 스위치다.
조건을 만족하는 칸만 켜고 나머지는 끈다. 꺼진 lane은 계산을 건너뛰어 원본을 그대로 둔다.
if 문 같은 분기를 lane 단위로 흉내 내는 방식이다.

reduction은 lane별 결과를 하나로 합치는 일이다. 다 더하거나 최댓값을 찾는 식이다.
16개를 한 줄로 더하면 15스텝이지만, 둘씩 짝지어 트리로 합치면 log₂16 = 4스텝이면 끝난다.
흩뿌려 계산하는 SIMD와 트리로 모으는 reduction, 이 두 박자가 벡터 연산의 기본 패턴이다.

일부 lane만 끄기 · 다 합치기
mask · reduction
mask켠 lane만 계산
13ON
1OFF
14ON
1OFF

꺼진 lane은 건너뛰어 원본을 유지한다 (lane 단위 if)

reduction트리로 합치기
13111411242549

둘씩 짝지어 합친다 · 4개를 2단계면 하나로

P.04반도체 설계 · 28

직접 lane을 늘려 speedup을 본다

lane 수를 1, 2, 4, 8로 바꾸면 같은 16칸을 처리하는 명령 횟수가 어떻게 줄어드는지 보인다.

한 스텝에 lane 수만큼 칸이 동시에 처리된다. lane을 2배로 늘리면 데이터가 충분할 때 SIMD 사이클이 절반에 가까워진다.

mask로 lane을 끄면 그 lane은 사이클은 쓰지만 일은 안 한다. 가동률이 떨어진다.
reduction은 처리된 결과를 트리로 합쳐 하나의 합으로 모은다.

lane 슬라이더 · mask · reduction + STEP 시뮬
SIMD 벡터 ALU · 한 명령으로 여러 lane
SIMD lane 수, 한 명령이 동시에 처리할 칸4 lane
1248

lane 1 = scalar(하나씩) · lane↑ = 한 번에 더 많이

mask, 끌 lane을 눌러 끔 (꺼진 lane은 계산 건너뜀)

켜진 lane 4 / 4, 꺼진 lane은 사이클은 쓰지만 일은 안 한다

예측 먼저, lane을 2배로 늘리면 SIMD 사이클은?
데이터 16칸 · 각 칸 + 10벡터 명령 0 / 4
3L0
1L1
4L2
1L3
5L0
9L1
2L2
6L3
5L0
3L1
5L2
8L3
9L0
7L1
9L2
3L3
명령(사이클) 수, 같은 16칸, 다른 방식
scalar16 명령
100%
한 명령 = 1칸
SIMD 4 lane4 명령
25%
한 명령 = 4칸

speedup ×4, lane을 늘릴수록, 데이터가 많을수록 더 벌어진다.

reduction, lane별 결과를 트리로 다 합치기
입력
16
L1
8
L2
4
L3
2
L4
1
최종 합80

16개를 한 줄로 더하면 15스텝. 둘씩 짝지어 트리로 합치면 4스텝이면 끝, 합도 SIMD로 빨라진다.

근거 패널, lane 가동률 · speedup
명령 수
4
scalar 16
speedup
×4
4 lane
가동률
100%
켜진 lane 4

모든 lane이 꽉 찼다(100%). 한 명령이 4칸을 빠짐없이 처리해 SIMD가 가장 잘 먹히는 상태다.

SIMD가 빠른 이유는 한 명령으로 여러 데이터를 동시에 처리하기 때문이다. 데이터가 많고 lane이 다 차 있을수록 이득이 크다.

P.05반도체 설계 · 28

데이터가 많을수록 SIMD가 이긴다

SIMD가 빠른 이유는 단 하나다. 한 명령으로 여러 데이터를 동시에 처리하기 때문이다.

이득의 크기는 데이터 양과 lane 수에 달렸다.
데이터가 적으면 명령 몇 번 차이라 별 이득이 없다.
데이터가 많을수록 scalar는 그만큼 명령이 늘지만, SIMD는 lane으로 나눠 횟수를 깎으니 격차가 벌어진다.

단, lane이 다 차 있어야 이득이 온전하다. 마스크로 끄거나 데이터가 모자라 비면 그 lane은 놀게 된다.
그래서 SIMD 설계의 핵심은 lane을 늘리고 빈 lane 없이 꽉 채우는 것이다.

Q. SIMD가 scalar보다 빠른 이유는?정답은 한 명령으로 여러 데이터를 동시에 처리하기 때문이다.
scalar는 한 명령에 한 칸이라 데이터 수만큼 명령을 발행하지만, SIMD는 lane을 여러 벌 깔아 한 명령으로 여러 칸을 한꺼번에 처리한다.
그래서 데이터가 많고 lane이 다 차 있을수록 명령 횟수가 줄어 더 빨라진다.
데이터 ↑ · lane ↑ → speedup ↑
데이터 ↑ → 격차 ↑ (4 lane 기준)
데이터 4×4
scalar
SIMD
데이터 16×4
scalar
SIMD
데이터 64×4
scalar
SIMD
데이터 256×4
scalar
SIMD
scalar는 칸 수만큼 명령이 든다 · SIMD는 lane으로 나눠 깎는다

3줄 요약

  1. 1한 명령으로 여러 lane — mask·reduction·speedup
  2. 2SIMD와 벡터 ALU은 비트·게이트 → ALU → 시간·메모리 → 나만의 CPU → 메모리·GPU·SoC 흐름 안의 한 칸이다.
  3. 3개념을 외우는 것보다 입력을 바꾸면 무엇이 달라지는지 보는 것이 우선이다.

완료 전 점검

복습 카드

SIMD와

한 명령으로 여러 lane — mask·reduction·speedup

ALU

산술·논리 연산을 하는 회로

ISA

CPU가 이해하는 명령어 집합과 인코딩