콘텐츠로 바로가기

SIMD & Vector CPU Extensions

하나의 명령어로 거대한 데이터 배열을 한꺼번에 처리하는 SIMD 방식과 AVX, NEON 등 현대 CPU의 벡터 연산 하드웨어 가속을 다루는 학습 노드입니다.

sys.entry
M

Me

hyunyoun's Blog

posts7 min read

1. Overview

SIMD 및 벡터 CPU 확장(SIMD & Vector CPU Extensions, SVE)은 프로세서가 루프를 돌며 데이터를 하나씩 처리하는 전통적인 스칼라(Scalar) 방식에서 벗어나, 넓은 폭의 레지스터에 데이터를 가득 채우고 한 번의 물리적 박동으로 수십 개의 연산을 처리하는 하드웨어 병렬 가속 기술입니다.

학습자는 하나의 명령어가 여러 데이터를 제어한다는 **SIMD (Single Instruction, Multiple Data)**의 철학을 배우고, Intel의 AVX나 ARM의 NEON과 같은 실제 벡터 확장 명령어 집합의 물리적 레지스터 구조(128/256/512비트)를 익힙니다. 이는 영상 처리, AI 추론, 암호화와 같이 대량의 수치 연산이 필요한 영역에서 하드웨어 성능을 수십 배로 끌어올리는 근본적인 도구이며, 소프트웨어가 하드웨어의 '데이터 통로 폭(Width)'을 어떻게 최대한 활용해야 하는지 결정짓는 지식을 제공합니다.

2. Scope & Boundaries

In-Scope

  • SIMD Physics: 레지스터 패킹(Packing) 및 언패킹 기술, 레인(Lane) 기반 연산
  • Vector ISAs: Intel Streaming SIMD Extensions (SSE, AVX), ARM NEON, SVE
  • Data Parallelism Mechanics: 병렬 가산, 내적, 마스킹(Masking) 연산 물리
  • Alignment Physics: 벡터 레지스터에 데이터를 실을 때의 메모리 정렬 제약

Out-of-Scope

  • GPU 기반의 GPGPU/CUDA 프로그래밍 상세 (02-06 Graphics 영역으로 위임)
  • 동적 코드 변환 기술(JIT) 내부의 자동 최적화 로직

Boundaries

  • SVE vs. Multicore: 멀티코어가 '여러 명의 작업자'를 두는 것이라면, SVE는 한 명의 작업자가 '매우 크고 아름다운 특수 연산 도구'를 한꺼번에 휘두르는 것과 같습니다.

3. Counterexample

  • 단순히 "루프를 빠르게 만든다"는 설명은 SVE 학습이 아닙니다. 벡터 레지스터의 레인(Lane) 사이에 데이터가 섞이는 'Shuffling'이나 'Permute' 연산이 실제 하드웨어 데이터 패스에서 왜 가장 비싼 물리적 비용을 요구하는지 지적할 수 있어야 하고, 데이터가 벡터 길이에 딱 맞지 않을 때 발생하는 테일 루프(Tail Loop) 처리 코드가 하드웨어에서 왜 성능 저하를 유발하는지 분석하지 못한다면 SVE의 실무적 깊이를 놓친 것입니다.

4. Prerequisites

  • ALU & Data Path Design (Basic): 다중 비트 연산기 구조 지식이 필수입니다. (02-01-03 ADP)
  • Integer & Float Representations (Recommended): 데이터 패킹을 위한 비트 단위 데이터 배치 능력이 권장됩니다. (02-01-02 IFR)

5. Learning Map

  1. Parallel Vision: 단일 값(Scalar)이 아닌 묶음 값(Vector)으로 데이터를 바라보는 시각을 세웁니다.
  2. Wide Registers: CPU 내부에 128비트, 256비트 등 거대한 그릇을 마련하는 물리적 확장을 익힙니다.
  3. Array Hardening: 한 번의 '덧셈' 신호로 레지스터 내 모든 칸의 데이터를 병렬 연산하는 기법을 배웁니다.
  4. Hardware Specifics: 내 PC나 스마트폰이 지원하는 AVX/NEON의 물리적 한계와 성능 사양을 파악합니다.

6. Learning Topics

Basic

Core: SIMD의 원리와 데이터 패킹 (SIMD Foundations)

  • Why to Learn: CPU의 물리적 회로를 데이터마다 따로 만들지 않고, 하나의 제어 신호를 공유하여 전력 대 성능비를 극대화하기 위함입니다.
  • What to Learn:
    • 스칼라(Scalar) vs 벡터(Vector) 실행 물리: 1<1> vs 1 대응
    • 데이터 패킹: 32비트 레지스터 4개를 128비트 벡터 하나의 레인들로 간주하는 물리
    • 처리량(Throughput) 배수: 128비트에서 int32 4개를 동시 연산할 때 얻는 4배 가속의 원리
  • How to Learn:
    • A[0]+B[0]A[0]+B[0] 부터 A[3]+B[3]A[3]+B[3] 까지를 4번에 걸쳐 수행하는 방식과, 한 번의 벡터 로드-가산-저장으로 끝내는 방식의 클록 사이클 비교 실습
    • 벡터 레지스터 내부에서 데이터가 어떻게 구획(Partition)되는지 가시화 분석
  • Implement: 일반 배열 덧셈과 SIMD 의사 코드를 비교하여 가상의 가속률을 산출하는 계산 도구

Core: AVX와 NEON 명령어 집합 (Vector ISA Standards)

  • Why to Learn: 실제 산업계에서 가장 많이 쓰이는 하드웨어 가속 규약을 통해 최적화 성능을 실현하기 위해서입니다.
  • What to Learn:
    • Intel AVX-256/512: YMM/ZMMYMM/ZMM 레지스터 구조와 부동소수점 병렬 연산 최적화
    • ARM NEON: 임베디드 및 모바일 멀티미디어 가속을 위한 고정 소수점/정수 SIMD 물리
    • 마스크 레지스터(Mask Registers): 조건부 연산을 위해 특정 레인만 활성화하거나 끄는 물리적 필터링
  • How to Learn:
    • AVX 명령어를 사용하여 이미지의 픽셀 8개를 동시에 그레이스케일로 변환하는 물리적 시퀀스 추적
    • _mm256_add_ps 와 같은 인트린직(Intrinsic) 함수가 실제 어떤 하드웨어 연산기에 전압을 거는지 분석
  • Implement: 특정 벡터 규격(예: 128bit)이 주어졌을 때, 자료형 크기에 따라 한 클록에 처리 가능한 최대 데이터 수를 리턴하는 분석기

Practical

Core: 메모리 정렬과 벡터화 제약 (Data Alignment)

  • Why to Learn: 하드웨어가 데이터를 가져올 때 '벡터 단위의 정렬'이 어긋나면 발생하는 파괴적인 속도 저하를 막기 위함입니다.
  • What to Learn:
    • 정렬된 로드(Aligned Load) vs 정렬되지 않은 로드(Unaligned)의 물리적 비용 차이
    • 캐시 라인 경계에 걸친 벡터 로드가 유발하는 추가적인 버스 트래픽
    • 데이터 의존성(Loop-carried dependency)으로 인해 벡터화가 불가능한 물리적 상황 식별
  • How to Learn:
    • 16바이트 정렬이 된 데이터와 아닌 데이터의 메모리 초기화 코드를 작성하고, 실제 로드 명령어의 지연 시간 비교 벤치마킹 실습
    • "이전 결과가 다음 입력인" 루프가 왜 하드웨어적으로 동시에 연산될 수 없는지 수리적 입증
  • Implement: 배열 시작 주소를 체크하여 특정 벡터 확장(AVX-512 등)에 적합한 정렬 상태인지 판별해주는 검사 도구

Advanced

Core: 가변 길이 벡터와 최신 기술 (Scalable Vector Extensions)

  • Why to Learn: 하드웨어마다 레지스터 폭이 달라도 코드를 다시 짜지 않아도 되는 유연한 미래형 벡터 아키텍처를 이해하기 위해서입니다.
  • What to Learn:
    • ARM SVE (Scalable Vector Extension): 벡터 폭에 구애받지 않는(Agnostic) 명령어 물리
    • 게더-스캐터(Gather-Scatter): 흩어져 있는 메모리 데이터를 벡터 레지스터로 긁어 모으는 고난도 물리 기술
    • 수평 연산(Horizontal Ops): 벡터 내부의 모든 원소를 하나로 합치는 특수 처리
  • How to Learn:
    • 128비트 기기에서는 4개씩, 512비트 기기에서는 16개씩 자동으로 처리 범위가 늘어나는 SVE 루프 제어 원리 분석 실습
    • 행렬 전치(Transpose) 시 벡터 레지스터 내에서 데이터 배치를 바꾸는 물리적 셔플 전략 수립
  • Implement: 벡터 레지스터 내부 원소들을 한 번에 더하는(Reduction) 최적의 이진 트리 방식 호출 시퀀스 설계

7. Terminology

Term (EN / ko, abbr) 1문장 정의 단계(기본/권장/실무/심화) 역할/맥락 관련 개념 유사/대비/함께 사용 오해 포인트 Evidence(Primary/Secondary/Industry) Flags(core)
SIMD 단일 명령어로 여러 개의 데이터 포인트에 대해 동일한 물리적 연산을 병렬 수행하는 방식입니다. 기본 병렬 방식 Vectors SISD '멀티스레딩'과 다른 층위 P1:CS2023/Parallelism core
Lane (레인) 벡터 레지스터 내에서 독립적인 하나의 데이터 요소가 처리되는 물리적 구분 단위입니다. 추천 연산 구획 Element / Port Channel '도로 차선' 비유와 유사 Industry Extension core
Intrinsic 어셈블리 직접 작성 없이 고수준 언어에서 특정 하드웨어 벡터 명령을 1<1로> 호출하게 돕는 기능입니다. 실무 함수 인터페이스 Instruction Library '일반 라이브러리 함수'와 다름 Industry core
Masking 벡터 연산 시 특정 레인(Lane)의 결과만을 취하거나 버리도록 제어하는 하드웨어 필터링 물리입니다. 심화 조건부 제어 Predication Conditional '데이터 은폐'와 무관 Industry core

8. References

Primary

Secondary

  • [Intel Intrinsics Guide] — The interactive industry reference for developers.
  • [Real-World SIMD with NEON and AVX] — Practical optimization book.

Industry

  • [ARM NEON Programmer's Guide] — Essential for mobile/embedded dev.
  • [Intel 64 and IA-32 Architectures Instruction Set Reference - AVX] — Official spec.

9. Final Checklist

Primary

  • 단일 명령어 흐름에서 256비트 부동소수점 벡터 레지스터가 동시에 처리 가능한 float32 데이터 개수를 수리적으로 도출할 수 있는 가? (P1)
  • SIMD 아키텍처가 전형적인 이미지 필터링(예: 흐림 효과)에서 스칼라 연산보다 물리적으로 왜 우월한지 데이터 패스 관점에서 입증 가능한가? (P1)

Secondary

  • 메모리 정렬(Memory Alignment)이 지켜지지 않았을 때, 하드웨어가 두 번의 메모리 트랜잭션을 수행해야만 하는 물리적 이유를 설명할 수 있는 가?
  • 벡터 연산 중 '조건부 실행(if-else)'을 처리하기 위해 'Masking' 비트가 실제 ALU의 연산 결과 반영을 어떻게 물리적으로 차단하는지 소통 가능한가?

Industry

  • 딥러닝 추론 엔진(예: TensorFlow Lite) 최적화 시, 특정 CPU의 NEON 지원 여부에 따라 데이터 레이아웃을 'NCHW'에서 'NHWC'로 바꿀 때의 성능 이점을 제안할 수 있는 가? (SFIA)
  • 암호화 알고리즘(AES 등) 구현 시, 하드웨어 내장 벡터 인스트럭션을 사용하여 소프트웨어 구현 대비 보안성과 성능이 동시에 향상됨을 물리적으로 증명할 수 있는 가?