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
- Parallel Vision: 단일 값(Scalar)이 아닌 묶음 값(Vector)으로 데이터를 바라보는 시각을 세웁니다.
- Wide Registers: CPU 내부에 128비트, 256비트 등 거대한 그릇을 마련하는 물리적 확장을 익힙니다.
- Array Hardening: 한 번의 '덧셈' 신호로 레지스터 내 모든 칸의 데이터를 병렬 연산하는 기법을 배웁니다.
- 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>1> vs 1
대응 - 데이터 패킹: 32비트 레지스터 4개를 128비트 벡터 하나의 레인들로 간주하는 물리
- 처리량(Throughput) 배수: 128비트에서
int324개를 동시 연산할 때 얻는 4배 가속의 원리
- 스칼라(Scalar) vs 벡터(Vector) 실행 물리: 1<1>1> vs 1
- How to Learn:
- 부터 까지를 4번에 걸쳐 수행하는 방식과, 한 번의 벡터 로드-가산-저장으로 끝내는 방식의 클록 사이클 비교 실습
- 벡터 레지스터 내부에서 데이터가 어떻게 구획(Partition)되는지 가시화 분석
- Implement: 일반 배열 덧셈과 SIMD 의사 코드를 비교하여 가상의 가속률을 산출하는 계산 도구
Recommended
Core: AVX와 NEON 명령어 집합 (Vector ISA Standards)
- Why to Learn: 실제 산업계에서 가장 많이 쓰이는 하드웨어 가속 규약을 통해 최적화 성능을 실현하기 위해서입니다.
- What to Learn:
- Intel AVX-256/512: 레지스터 구조와 부동소수점 병렬 연산 최적화
- 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
8. References
Primary
- [P1] CS2023 - AR/Parallelism — Main standard for SIMD.
- [P2] SWEBOK v4.0 - Computing Foundations / Data Parallelism — Structural standards.
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 등) 구현 시, 하드웨어 내장 벡터 인스트럭션을 사용하여 소프트웨어 구현 대비 보안성과 성능이 동시에 향상됨을 물리적으로 증명할 수 있는 가?