데이터 표현 & SIMD

두부4등분·2025년 11월 8일

"컴퓨터는 숫자를 어떻게 저장하고, 한 번에 얼마나 많이 계산할까?"

이 글에서는 CPU 내부의 표현 방식과, 현대 CPU의 핵심 기술인 SIMD 구조를 정리하겠다.


1. 데이터 표현의 기본: Bit

모든 데이터는 결국 0과 1로 표현된다.

단위크기예시
1 bit0 또는 11개의 전기 신호
8 bits1 byte‘A’ = 01000001
16 bits2 bytesUTF-16 문자 등
32 bits4 bytes일반적인 정수형(int)
64 bits8 bytesCPU 레지스터 크기(현대 기준)

2. 정수의 표현: 2의 보수

CPU는 음수를 표현하기 위해 2의 보수 방식을 사용한다.

십진수이진수 (8bit)비고
+50000 0101양수 그대로 저장
-51111 10112의 보수 형태로 저장

2의 보수 만드는 법

  1. 양수의 비트를 모두 뒤집는다 (1의 보수)
  2. +1을 더한다 -> 0000 0101 -> 1111 1010 -> 1111 1011

이 방식 덕분에 CPU는
"덧셈 회로 하나로 뺄셈까지 계산할 수 있다."

3. 실수의 표현: IEEE 754

실수는 IEEE 754 부동소수점 표준으로 표현된다.

[ 부호(S) | 지수(E) | 가수(M) ]
   1bit      8bit      23bit
구분비트 수역할
부호(S)10 = +, 1 = -
지수(E)8소수점의 위치 (2의 지수 표현)
가수(M)23실제 숫자의 유효한 부분 (정밀도)

예시)
10.5를 IEEE 754로 표현
1. 10.5 = 1010.1 (2진수)
2. 정규화 -> 1.0101 * 2^3 (컴퓨터는 2진수로 동작하기 때문에 2의 제곱을 기준으로 소수점이 움직인다.)
3. 지수 = 3 + 127 = 130 (10000010)
4. 부호 = 0, 가수 = 0101...
-> 따라서 저장 비트: 0 10000010 01010000000000000000000

요약

항목의미예시
부호 비트양수/음수 결정0 = +, 1 = -
지수소수점 위치 이동량+127을 더해서 저장
가수실수의 유효자리소수 이하를 2진수로 표현

SIMD의 핵심 개념

Single Instruction, Multiple Data
"한 번의 명령으로 여러 데이터를 동시에 계산한다."

SIMD란?

일반적인 CPU 명령어는 한 번에 하나의 데이터 쌍만 계산한다. 하지만 비슷한 계산을 반복적으로 수행해야 하는 작업에서는 이 방식이 너무 느리다.

그래서 CPU는 SIMD라는 구조를 도입했다.
"명령어는 한 번, 데이터는 여러 개"

예시)

방식설명예시
일반 연산 (Scalar)한 번에 하나씩 계산a1 + b1, a2 + b2, a3 + b3
SIMD 연산한 번에 여러 개를 동시에 계산[a1,a2,a3,a4] + [b1,b2,b3,b4]

SIMD 레지스터 구조

CPU는 SIMD를 위해 특수한 레지스터를 갖고 있다.

세대명령어 집합레지스터 크기예시
SSE (Streaming SIMD Extensions)128bitxmm0 ~ xmm15
AVX (Advanced Vector Extensions)256bitymm0 ~ ymm15
AVX-512512bitzmm0 ~ zmm31

하나의 레지스터에 32bit 실수 4개를 담으면, addps 명령 한번으로 4개의 덧셈이 동시에 일어난다.

section .data
	A dd 1.0, 2.0, 3.0, 4.0
    B dd 5.0, 6.0, 7.0, 8.0
section .text
	global _start
_start:
	movaps xmm0, [A]	; xmm0 = {1.0, 2.0, 3.0, 4.0}
    movaps xmm1, [B]	; xmm = {5.0, 6.0, 7.0, 8.0}
    
    addps xmm0, xmm1    ; xmm0 = {6.0, 8.0, 10.0, 12.0}
    mulps xmm0, xmm1    ; xmm0 = {30.0, 48.0, 70.0, 96.0}

    mov eax, 60
    xor edi, edi
    syscall

해석

  • movaps: 128비트를 한 번에 복사
  • addps: "Add Packed Single" - 실수 4개를 병렬로 더함
  • mulps: "Multiply Packed Single" - 실수 4개를 병렬로 곱함

SIMD의 장점

구분일반 연산SIMD 연산
명령어 수4회 반복1회만 실행
레지스터 접근매번 필요한 번에 4개
처리 속도느림3~8배 빠름

SIMD는 CPU 성능을 폭발적으로 끌어올리는 핵심 기술이다.

실제 CPU 내부 동작

SIMD 명령은 내부적으로 ALU가 여러 개 병렬로 연결되어 있다.
즉, 하나의 명령이 내려오면

  • ALU0은 첫 번째 데이터,
  • ALU1은 두 번째 데이터,
  • ALU2는 세 번째 데이터...
    이런 식으로 같은 연산을 동시에 수행한다.

0개의 댓글